django2如何写url(2023年最新解答)

兄弟们,请问一下,django2如何写url(2023年最新解答)
最新回答
何必太在乎你

2024-11-30 15:25:01

导读:今天首席CTO笔记来给各位分享关于django2如何写url的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

请教各位高手Django的url配置问题

流线型化(streamlinling)函数导入

1:直接导入视图函数

fromdjango.conf.urls.defaultsimport*

frommysite.viewsimporthello

urlpatterns=patterns('',

(r'^hello/$',hello),

(r'^time/$',time),

)

2:导入包函模块名和函数的客串,而不是函数本身

fromdjango.conf.urls.defaultsimport*

frommysiteimportviews

urlpatterns=patterns('',

(r'^hello/$','views.hello'),

(r'^time/$','views.time'),

)

3:不用导入任何视图内容,写清楚字符串描述

fromdjango.conf.urls.defaultsimport*

urlpatterns=patterns('',

(r'^hello/$','mysite.views.hello'),

(r'^time/$','mysite.views.time'),

)

4:提取一个公共视图前缀

fromdjango.conf.urls.defaultsimport*

urlpatterns=patterns('mysite.views',

(r'^hello/$','hello'),

(r'^time/$','time'),

)

5:partterns()返回对对象的相加

旧:

fromdjango.conf.urls.defaultsimport*

urlpatterns=patterns('mysite.view',

(r'^hello/$','hello'),

(r'^time/$','time'),

(r'^other/$','mysite.others.other'),

)

新:

fromdjango.conf.urls.defaultsimport*

urlpatterns=patterns('mysite.view',

(r'^hello/$','hello'),

(r'^time/$','time'),

)

urlpatterns+=patterns('mysite.others',

(r'^other/$','other'),

)

6:到目前为止,在所有URLconf例子中,我们使用的很简单,即“无命名”正则表达式组,在我们

想要捕获的URL部分加上小括号,django会将捕获的文本作为位置参数传递给视图函数。在更

高级的用法中,还可以使用“命名”正则表达式组来捕获URL,并且将其作为“关键字”参数传给视图。

在python正则表达式中,命名的正则表达式组的语法是(?pnamepattern),这里name是组的名字,而pattern是匹配的某个模式。

下面是一个使用无名组的URLconf的例子:

fromdjango.conf.urls.defaultsimport*

frommysiteimportviews

urlpatterns=patterns('',

(r'^arcticles/(\d{4})/$',views.year_archive),

(r'^arcticles/(\d{4})/(\d{2})/$',view.moth_archive),

)

下面是相同的URLconf,使用命名组进行了重写:

fromdjango.conf.urls.defaultsimport*

frommysiteimportviews

urlpatterns=patterns('',

(r'^arcticles/(?Pyear\d{4})/$',veiws.year_archive),

(r'^arcticles/(?Pyear\d{4})/(?Pmonth\d{2})/$',veiws.month_archive),

)

如果不带命名组,请求/arcticle/2006/03/将会等于这样的函数调用:

month_archive(request,'2006','03')

而带命名组,同样的请求就是这样的函数调用:

month_archive(request,year='2006',month='03')

从中可以看出,使用命名组可以让你的URLconf更加清晰,减少参数次序可能搞混潜在的Bug,

还可以让你的定义中对参数重新排序。

7:视图冗余:

#urls.py

fromdjango.conf.urls.defaultsimport*

frommysiteimportviews

urlpatterns=patterns('',

(r'^(foo)/$',views.foobar_view),

(r'^(bar)/$',views.foobar_view),

)

#views.py

fromdjango.shortcutsimportrender_to_response

frommysite.modelsimportMyModel

deffoobar_view(request,url):

m_list=MyModel.objects.filter(is_new=True)

ifurl=='foo':

template_name='template1.html'

elifurl=='bar':

template_name='template2.html'

returnrender_to_response(template_name,{'m_list':m_list})

利用上面的方法可以减少视图冗余

8:为url里传入固定的参数:

#urls.py

fromdjango.conf.urls.defaultsimport*

frommysiteimportviews

urlpatterns=patterns('',

(r'^foo/$',views.foobar_view,{'template_name':'template1.html'}),

(r'^bar/$',views.foobar_view,{'template_name':'template2.html'}),

)

#views.py

fromdjango.shortcutsimportrender_to_response

frommysite.modelsimportMyModel

deffoobar_view(request,template_name):

m_list=MyModel.objects.filter(is_new=True)

returnrender_to_response(template_name,{'m_list':m_list})

一些URL参数详解:

/mydata/jan/01/

/mydata/jan/02/

/mydata/jan/03/

以上为三个url我们可以用不同的方式实现

1:(r'^mydata/(/w{3})/(/d/d)',views.mydata)mydata(request,'jan','01')

2:(r'^mydata/(?Pmonth/w{3})/(?Pday/d/d)',view.mydata)mydata(request,month='jan',day='01')

3:(r'^mydata/birthday/$',views.mydata,{month:'jan',day:'01'})mydata(request,month='jan',day='01')

9:include导入:

fromdjango.conf.urls.defaultsimport*

urlpatterns=patterns('',

(r'^weblog/',include('mysite.blog.urls')),

(r'^photos/',include('mysite.photos.urls')),

(r'^about/$','mysite.views.about'),

)

10:实例:

验证用户是否登录:

以下是三个视图

defmy_view1(request):

ifnotrequest.user.is_authenticated():

returnHttpResponseRedirect('/accounts/login/')

#...

returnrender_to_response('template1.html')

defmy_view2(request):

ifnotrequest.user.is_authenticated():

returnHttpResponseRedirect('/accounts/login/')

#...

returnrender_to_response('template2.html')

defmy_view3(request):

ifnotrequest.user.is_authenticated():

returnHttpResponseRedirect('/accounts/login/')

#...

returnrender_to_response('template3.html')

以下是对视图进行包装:

defrequires_login(view):

defnew_view(request,*args,**kwargs):

ifnotrequest.user.is_authenticated():#如果用户没有登录,跳转到登录界面

returnHttpResponseRedirect('/accounts/login/')

returnview(request,*args,**kwargs)#否则返回传进来的方法

returnnew_view#返回new_view值:登录视图或者是传进来的视图

以下为URL配置:

fromdjango.conf.urls.defaultsimport*

frommysite.viewsimportrequires_login,my_view1,my_view2,my_view3

urlpatterns=patterns('',

(r'^view1/$',requires_login(my_view1)),

(r'^view2/$',requires_login(my_view2)),

(r'^view3/$',requires_login(my_view3)),

)

django的url配置求教为什么无法include

fromdjango.conf.urlsimportpatterns,include,url

fromviewsimport*

urlpatterns=patterns(

url(r'^hello/$',hello),

)

第二个url写法是有问题的,导入模块写法应该是fromapp.viewsimporthello这个格式,在django中,都应该这种导入方法。

另入,像第二个,我平时是这么写的:

url(r'^hello/$','app.viwes.hello`),

多看下djangobook里面的url写法。

问一下django的时间/ID这样传递两个参数的正则url怎么写?详情..

url捕获时间,传递到views里,根据时间查询数据库,然后返回到页面,是这样一个流程吗?

django怎么发起url请求

开始于setting文件。当你运行pythonmanage.pyrunserver,脚本将在于manage.py同一个目录下查找名为setting.py的文件。这个文件包含了所有有关这个Django项目的配置信息,均大写:TEMPLATE_DIRS,DATABASE_NAME,等.最重要的设置时ROOT_URLCONF,它将作为URLconf告诉Django在这个站点中那些Python的模块将被用到

当访问URL/hello/时,Django根据ROOT_URLCONF的设置装载URLconf。然后按顺序逐个匹配URLconf里的URLpatterns,直到找到一个匹配的。当找到这个匹配的URLpatterns就调用相关联的view函数,并把HttpRequest对象作为第一个参数。

正如我们在第一个视图例子里面看到的,一个视图功能必须返回一个HttpResponse。一旦做完,Django将完成剩余的转换Python的对象到一个合适的带有HTTP头和body的WebResponse

总结一下:

进来的请求转入/hello/.

Django通过在setting.py中的ROOT_URLCONF配置来决定根URLconf.

Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。

如果找到匹配,将调用相应的视图函数

视图函数返回一个HttpResponse

Django转换HttpResponse为一个适合的HTTPresponse,以Webpage显示出来

Django媒体文件URL的配置

在Django中经常需要配置图片、视频等表态文件,在配置时较为复杂,这里纪录一下:

在文件尾部加入以下目录,用于存放上传的文件

在models中写上image字段其中%Y代表年,%m代表月,blank=True代表可以为空。当上传文件时,代表上传到image目录下,以当前年月子目录的文件夹中。

image=models.ImageField(upload_to="image/%Y/%m",blank=True)

其中src中的{{MEDIA_URL}}会在模板中渲染为第一步中的/media/

如果您想在模板中使用{{MEDIA_URL}},请在“模板”的“context_processors”选项中添加django.template.context_processors.media。

通过以上步骤,基本上可以在前端正常渲染出结果了,但还需要给图片添加一个URL以正常显示。

第一行为引入静态文件的serve,第二行为导入工程配置文件中的MEDIA_ROOT

在url中加入:

djangoa标签传递参数,urls.py要怎么写

可以使用url里面自带的name的方法。

对于像a这样链接的操作。用法:不带参数的:{%url'name'%}带参数的:参数可以是变量名{%url'name'参数%}所以这里的改变为:url('^login_first/$',views.login,name="login_first")(对于其他部分自动补脑),在ahref="{%url'login_first'%}".

解释:{%url'login_first'%},这里的login_first代表着这个url自动去寻找django的url里面name="login_first"这个条链接,并将前面的url赋给a标签中的href。

结语:以上就是首席CTO笔记为大家整理的关于django2如何写url的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django2如何写url的相关内容别忘了在本站进行查找喔。