对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基于multiprocessing的多进程创建方法
Jun 04 Python
详解python中的文件与目录操作
Jul 11 Python
Python格式化字符串f-string概览(小结)
Jun 18 Python
Django使用中间键实现csrf认证详解
Jul 22 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
Python统计时间内的并发数代码实例
Dec 28 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 Python
Python3合并两个有序数组代码实例
Aug 11 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 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定时执行计划任务的多种方法小结
2011/12/19 PHP
php中的静态变量的基本用法
2014/03/20 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
AngularJS内置指令
2015/02/04 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
Python做简单的字符串匹配详解
2017/03/21 Python
Python3中的json模块使用详解
2018/05/05 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
临床医学系毕业生推荐信
2013/11/09 职场文书
装潢设计专业推荐信模板
2013/11/26 职场文书
自我评价范文分享
2014/01/04 职场文书
运动会广播稿100字
2014/01/11 职场文书
集体婚礼证婚词
2014/01/13 职场文书
文员岗位职责
2015/02/04 职场文书
个人总结怎么写
2015/02/26 职场文书
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏