URL的配置有很多种,这里列举一下
1.配置直到views的具体函数
不常用,不推荐,对于每个函数都要在开头写引用,极其麻烦
urlpatterns = patterns('',
(r'^hello/$', hello),
(r'^time/$', current_datetime),
(r'^time/plus/(\d{1,2})/$', hours_ahead),
)
2.用字符串表示函数的路径
常用,每个URL对应的函数写全路径,可以用字符的方式表示,
urlpatterns = patterns('',
(r'^hello/$', 'mysite.views.hello' ),
(r'^time/$', 'mysite.views.current_datetime' ),
(r'^time/plus/(d{1,2})/$', 'mysite.views.hours_ahead' ),
)
进阶写法,可以把公共部分写到开头中,如下, mysite.views已经被提前到第一个参数, 在下面的配置中变得很简洁
urlpatterns = patterns('mysite.views' ,
(r'^hello/$', 'hello' ),
(r'^time/$', 'current_datetime' ),
(r'^time/plus/(d{1,2})/$', 'hours_ahead' ),
)
再进阶,联合多个不再一个views里面的函数
这种写法个人觉得不推荐, 完全可以独立出几个app写到各个APP中,更加清晰
urlpatterns = patterns('mysite.views',
(r'^hello/$', 'hello'),
(r'^time/$', 'current_datetime'),
(r'^time/plus/(\d{1,2})/$', 'hours_ahead'),
)
urlpatterns += patterns('weblog.views',
(r'^tag/(\w+)/$', 'tag'),
)
3.URL的通配符支持
简单的例子, 不写对应的名称,
urlpatterns = patterns('',
(r'^articles/(\d{4})/$', views.year_archive),
(r'^articles/(\d{4})/(\d{2})/$', views.month_archive),
)
对应函数
def year_archive(request,day,year):
指明参数名的例子如下,和上例中的区别在于,在定义函数的时候,参数名称要对得上
urlpatterns = patterns('',
(r'^articles/(?P<year>\d{4})/$', views.year_archive),
(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', views.month_archive),
)
4.通过URL给views传参数
这个常用于使用一个views对应多个url的情况, 可以通过在url中提前配置一些特异信息, 让view函数知道如何应对
这个例子本身已经说明问题了~
urlpatterns = patterns('',
(r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),
(r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),
)
# views.py
from django.shortcuts import render_to_response
from mysite.models import MyModel
def foobar_view(request, template_name="me"):
m_list = MyModel.objects.filter(is_new=True)
return render_to_response(template_name, {'m_list': m_list})
注意到template_name="me"这个是一个默认值的设置,假如在url中没有任何值传入, 这个默认参数就生效了
进阶:
格式化数字URL传参,比如可以用today替代一些数字
urlpatterns = patterns('',
(r'^mydata/birthday/$', views.my_view, {'month': 'jan', 'day': '06'}),
(r'^mydata/(?P<month>\w{3})/(?P<day>\d\d)/$', views.my_view),
)
5.URL的包含,一般用在主要的url和二级app的包含中
urlpatterns = patterns('',
(r'^(?P<username>\w+)/blog/', include('foo.urls.blog')),
)
本文详细介绍了Django中URL配置的各种方式,包括直接指定视图函数、使用字符串表示路径、利用通配符传递参数等,并提供了实际代码示例。
4万+

被折叠的 条评论
为什么被折叠?



