对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中Flask框架简单入门实例
Mar 21 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
Jun 11 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
详解Python是如何实现issubclass的
Jul 24 Python
pandas数据处理进阶详解
Oct 11 Python
python循环输出三角形图案的例子
Nov 22 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
Python 跨.py文件调用自定义函数说明
Jun 01 Python
python golang中grpc 使用示例代码详解
Jun 03 Python
Python的scikit-image模块实例讲解
Dec 30 Python
Python中Numpy和Matplotlib的基本使用指南
Nov 02 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简单预防sql注入的方法
2016/09/27 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
代码详解javascript模块加载器
2018/03/04 Javascript
React 组件间的通信示例
2018/06/14 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
Python3中bytes类型转换为str类型
2018/09/27 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
Python图像读写方法对比
2020/11/16 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
Java servlet面试题
2012/03/04 面试题
委托书怎么写
2014/07/31 职场文书
机械操作工岗位职责
2014/08/08 职场文书
2014年中秋寄语
2014/08/11 职场文书
自主招生英文自荐信
2015/03/25 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
企业安全生产检查制度
2015/08/06 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
nginx 添加http_stub_status_module模块
2022/05/25 Servers