对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 12 Python
python3实现随机数
Jun 25 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
Jun 26 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
Aug 23 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 Python
tensorflow转换ckpt为savermodel模型的实现
May 25 Python
Python中openpyxl实现vlookup函数的实例
Oct 28 Python
python turtle绘制多边形和跳跃和改变速度特效
Mar 16 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面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
理解Javascript闭包
2013/11/01 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
python实现的多线程端口扫描功能示例
2017/01/21 Python
浅谈Django REST Framework限速
2017/12/12 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
Python2与Python3的区别点整理
2019/12/12 Python
简单了解Python write writelines区别
2020/02/27 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
Java面试题汇总
2015/12/06 面试题
《神奇的克隆》教学反思
2014/04/10 职场文书
初中学校军训方案
2014/05/09 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书
2019个人工作总结
2019/06/21 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript