对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实现的金山快盘的签到程序
Jan 17 Python
Python random模块(获取随机数)常用方法和使用例子
May 13 Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 Python
Python中elasticsearch插入和更新数据的实现方法
Apr 01 Python
如何使用python把ppt转换成pdf
Jun 29 Python
使用pygame写一个古诗词填空通关游戏
Dec 03 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
python 实现两个npy档案合并
Jul 01 Python
python处理写入数据代码讲解
Oct 22 Python
python中翻译功能translate模块实现方法
Dec 17 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
Apr 07 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中如何实现常用邮箱的基本判断
2014/01/07 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
Javascript 继承机制的实现
2009/08/12 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
原生js配合cookie制作保存路径的拖拽
2015/12/29 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
vue 数据操作相关总结
2020/12/17 Vue.js
[49:58]完美世界DOTA2联赛PWL S3 Magma vs DLG 第一场 12.18
2020/12/19 DOTA
从零学Python之入门(四)运算
2014/05/27 Python
Python查看多台服务器进程的脚本分享
2014/06/11 Python
Python urlopen()函数 示例分享
2014/06/12 Python
Python数组条件过滤filter函数使用示例
2014/07/22 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
高中学生自我评价范文
2014/09/23 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
会议室管理制度范本
2015/08/06 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
Win11更新失败并提示0xc1900101
2022/04/19 数码科技