对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类方法__init__和__del__构造、析构过程分析
Mar 06 Python
Python中类型检查的详细介绍
Feb 13 Python
浅谈Series和DataFrame中的sort_index方法
Jun 07 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
深入学习python多线程与GIL
Aug 26 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
Jan 08 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
Jan 23 Python
python实现从ftp服务器下载文件
Mar 03 Python
python爬虫基础之urllib的使用
Dec 31 Python
详解Python中openpyxl模块基本用法
Feb 23 Python
PyTorch的Debug指南
May 07 Python
Python实现滑雪小游戏
Sep 25 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
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
2018/11/14 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
Nodejs中使用puppeteer控制浏览器中视频播放功能
2019/08/26 NodeJs
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
Python版的文曲星猜数字游戏代码
2013/09/02 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
python3 中时间戳、时间、日期的转换和加减操作
2020/07/14 Python
美国创意礼品网站:UncommonGoods
2017/02/03 全球购物
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
学前班教师的自我鉴定
2013/12/05 职场文书
爱国演讲稿500字
2014/05/04 职场文书
白岩松演讲
2014/05/21 职场文书
计算机毕业大学生求职信
2014/06/26 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
邀请书模板
2015/02/02 职场文书
html中两种获取标签内的值的方法
2022/06/16 jQuery