对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调用windows api锁定计算机示例
Apr 17 Python
Python3使用requests登录人人影视网站的方法
May 11 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
python3+mysql查询数据并通过邮件群发excel附件
Feb 24 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
Python2和Python3之间的str处理方式导致乱码的讲解
Jan 03 Python
Django框架中序列化和反序列化的例子
Aug 06 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
python实现最短路径的实例方法
Jul 19 Python
基于PyInstaller各参数的含义说明
Mar 04 Python
Golang Web 框架Iris安装部署
Aug 14 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
数据库查询记录php 多行多列显示
2009/08/15 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
js下拉菜单语言选项简单实现
2013/09/23 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
js表头排序实现方法
2015/01/16 Javascript
JavaScript闭包实例详解
2016/06/03 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
Python提取网页中超链接的方法
2016/09/18 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
50道外企软件测试面试题
2014/08/18 面试题
如何填写个人简历自我评价
2013/12/10 职场文书
函授大学生自我鉴定
2014/02/05 职场文书
《这儿真好》教学反思
2014/02/22 职场文书
大学生优秀自荐信范文
2014/02/25 职场文书
公司年会主持词
2014/03/22 职场文书
节能宣传周活动总结
2014/05/08 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
公司表扬稿范文
2015/05/05 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL