对Django url的几种使用方式详解


Posted in Python onAugust 06, 2019

利用Django开发网站,可以设计出非常优美的url规则,如果url的匹配规则(包含正则表达式)组织得比较好,view的结构就会比较清晰,比较容易维护。

最简单的形式

<code> 
from django.conf.urls import patterns, url 
urlpatterns = patterns('', 
 url(r'^articles/2003/$', 'news.views.special_case_2003'), 
 url(r'^articles/(\d{4})/$', 'news.views.year_archive'), 
 url(r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'), 
 url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'), 
)</code>

其中,正则表达式中组匹配出来的结果可以作为positional parameters传递给view.

如果url是www.yourdomain/articles/2005/,则会匹配第二条规则,执行news.views.year_archive('2005').

注意点

域名部分会被过滤掉

articles的前面不需要添加/,因为前序url的末尾一定会有/

任何组匹配的变量,都会议字符串的形式传递给view, 虽然通过(\d{4})匹配出了2005,但2005任然会被当做字符串传递给year_archive

利用named group来传递参数

可以通过以下形式为特定的组指定一个名称.

urlpatterns = patterns('', 
 url(r'^articles/2003/$', 'news.views.special_case_2003'), 
 url(r'^articles/(?P<year>\d{4})/$', 'news.views.year_archive'), 
 url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.month_archive'), 
 url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/$', 'news.views.article_detail'), 
)

这样的话,组的匹配结果会通过keyword parameters的形式传递给view.例如year_archive(year='2005')

利用named group可以为view指定一个默认参数来匹配多条规则。

# URLconf 
from django.conf.urls import patterns, url 
 
urlpatterns = patterns('', 
 url(r'^blog/$', 'blog.views.page'), 
 url(r'^blog/page(?P<num>\d+)/$', 'blog.views.page'), 
) 
 
# View (in blog/views.py) 
def page(request, num="1"): 
 # Output the appropriate page of blog entries, according to num.

指定view前缀(提取公因式)

patterns函数的第一个参数即是view的前缀

from django.conf.urls import patterns, url 
 
urlpatterns = patterns('news.views', 
 url(r'^articles/(\d{4})/$', 'year_archive'), 
 url(r'^articles/(\d{4})/(\d{2})/$', 'month_archive'), 
 url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'article_detail'), 
)

指定多个view前缀

urlpatterns = patterns('myapp.views', 
 url(r'^$', 'app_index'), 
 url(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$','month_display'), 
) 
urlpatterns += patterns('weblog.views', 
 url(r'^tag/(?P<tag>\w+)/$', 'tag'), 
)

include其它匹配模块

from django.conf.urls import include, patterns, url 
 
urlpatterns = patterns('', 
 # ... snip ... 
 url(r'^comments/', include('django.contrib.comments.urls')), 
 url(r'^community/', include('django_website.aggregator.urls')), 
 url(r'^contact/', include('django_website.contact.urls')), 
 # ... snip ... 
)

当然也可以直接include其它patterns

from django.conf.urls import include, patterns, url 
 
extra_patterns = patterns('', 
 url(r'^reports/(?P<id>\d+)/$', 'credit.views.report'), 
 url(r'^charge/$', 'credit.views.charge'), 
) 
 
urlpatterns = patterns('', 
 url(r'^$', 'apps.main.views.homepage'), 
 url(r'^help/', include('apps.help.urls')), 
 url(r'^credit/', include(extra_patterns)), 
)

为view函数传递额外参数

from django.conf.urls import patterns, url 
 
urlpatterns = patterns('blog.views', 
 url(r'^blog/(?P<year>\d{4})/$', 'year_archive', {'foo': 'bar'}), 
)

直接使用view函数

from django.conf.urls import patterns, url 
from mysite.views import archive, about, contact 
 
urlpatterns = patterns('', 
 url(r'^archive/$', archive), 
 url(r'^about/$', about), 
 url(r'^contact/$', contact), 
)

以上这篇对Django url的几种使用方式详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中使用smtplib和email模块发送邮件实例
Apr 22 Python
python多进程共享变量
Apr 06 Python
python 使用值来排序一个字典的方法
Nov 16 Python
解决python给列表里添加字典时被最后一个覆盖的问题
Jan 21 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
django和vue实现数据交互的方法
Aug 21 Python
Python shutil模块用法实例分析
Oct 02 Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 Python
Python selenium模拟手动操作实现无人值守刷积分功能
May 13 Python
Django URL参数Template反向解析
Nov 24 Python
python连接mongodb数据库操作数据示例
Nov 30 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 #Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
Aug 06 #Python
django基于存储在前端的token用户认证解析
Aug 06 #Python
django基于cors解决跨域请求问题详解
Aug 06 #Python
django组合搜索实现过程详解(附代码)
Aug 06 #Python
使用Python自动生成HTML的方法示例
Aug 06 #Python
Django RBAC权限管理设计过程详解
Aug 06 #Python
You might like
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
JS自调用匿名函数具体实现
2014/02/11 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
浅谈js中的闭包
2015/03/16 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
python输出指定月份日历的方法
2015/04/23 Python
Python中的一些陷阱与技巧小结
2015/07/10 Python
Python中元组,列表,字典的区别
2017/05/21 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
服务员岗位责任制
2014/02/11 职场文书
2014年圣诞节促销方案
2014/03/14 职场文书
建房协议书
2014/04/11 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
奠基仪式致辞
2015/07/30 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle
详解Laravel框架的依赖注入功能
2021/05/27 PHP