对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爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 Python
在Python中使用__slots__方法的详细教程
Apr 28 Python
Python爬取qq music中的音乐url及批量下载
Mar 23 Python
python ansible服务及剧本编写
Dec 29 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
对python函数签名的方法详解
Jan 22 Python
python实现实时视频流播放代码实例
Jan 11 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
python闭包与引用以及需要注意的陷阱
Sep 18 Python
Python eval函数原理及用法解析
Nov 14 Python
Python爬虫UA伪装爬取的实例讲解
Feb 19 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
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
PHP实现获取图片颜色值的方法
2014/07/11 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
[原创]图片分页查看
2006/08/28 Javascript
jQuery ui 1.7更新小结
2009/08/15 Javascript
JavaScript常用全局属性与方法记录积累
2013/07/03 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
荣耀商城:HIHONOR
2020/11/03 全球购物
新闻编辑自荐信
2013/11/03 职场文书
擅自离岗检讨书
2014/02/11 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
个人党性分析总结
2015/03/05 职场文书
中秋联欢会主持词
2015/07/04 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
java设计模式--原型模式详解
2021/07/21 Java/Android
mysql配置SSL证书登录的实现
2021/09/04 MySQL
如何用vue实现网页截图你知道吗
2021/11/17 Vue.js
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL