对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 05 Python
python Django模板的使用方法
Jan 14 Python
Python实例一个类背后发生了什么
Feb 09 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
python匹配两个短语之间的字符实例
Dec 25 Python
python中调试或排错的五种方法示例
Sep 12 Python
如何给Python代码进行加密
Jan 10 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
python selenium 获取接口数据的实现
Dec 07 Python
python opencv肤色检测的实现示例
Dec 21 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 Python
Python中lru_cache的使用和实现详解
Jan 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
PHP开发中常用的字符串操作函数
2011/02/08 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
php操作MongoDB类实例
2015/06/17 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
javascript demo 基本技巧
2009/12/18 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
Python常用知识点汇总
2016/05/08 Python
如何在python中使用selenium的示例
2017/12/26 Python
Sublime开发python程序的示例代码
2018/01/24 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
Python循环结构的应用场景详解
2019/07/11 Python
超级实用的8个Python列表技巧
2020/08/24 Python
深入分析python 排序
2020/08/24 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
现代化办公人员工作的自我评价
2013/10/16 职场文书
毕业设计计划书
2014/01/09 职场文书
自主实习接收函
2014/01/13 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
解除劳动合同协议书
2014/09/17 职场文书
2014年商场工作总结
2014/11/22 职场文书