django入门笔记3- URL关键用法

本文详细介绍了Django中URL配置的各种方式,包括直接指定视图函数、使用字符串表示路径、利用通配符传递参数等,并提供了实际代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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')),
)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值