对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实现的各种排序算法代码
Mar 04 Python
Python使用urllib2获取网络资源实例讲解
Dec 02 Python
使用 Python 获取 Linux 系统信息的代码
Jul 13 Python
Python素数检测的方法
May 11 Python
Python中random模块生成随机数详解
Mar 10 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
pycharm: 恢复(reset) 误删文件的方法
Oct 22 Python
解决Python一行输出不显示的问题
Dec 03 Python
Python实现字典按key或者value进行排序操作示例【sorted】
May 03 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
Jun 02 Python
pandas DataFrame运算的实现
Jun 14 Python
实操Python爬取觅知网素材图片示例
Nov 27 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
JS获取后台Cookies值的小例子
2013/03/04 Javascript
JS实现标签页效果(配合css)
2013/04/03 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
js给selected添加options的方法
2015/05/06 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
解决Vue编译时写在style中的路径问题
2017/09/21 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
用Python进行TCP网络编程的教程
2015/04/29 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
2018/10/29 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
在家更换处方镜片:Lensabl
2019/05/01 全球购物
个人简历的自荐信
2013/10/23 职场文书
《真想变成大大的荷叶》教学反思
2014/04/14 职场文书
博士生专家推荐信
2014/09/26 职场文书
受资助学生感谢信
2015/01/21 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
年底个人总结范文
2015/03/10 职场文书
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL