对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系列之数据处理编程实例(二)
May 22 Python
Python SQLite3数据库操作类分享
Jun 10 Python
Python实现SMTP发送邮件详细教程
Mar 02 Python
深入理解Python爬虫代理池服务
Feb 28 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
python判断字符串或者集合是否为空的实例
Jan 23 Python
python psutil模块使用方法解析
Aug 01 Python
python3实现微型的web服务器
Sep 03 Python
python实现高斯投影正反算方式
Jan 17 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
Apr 11 Python
python/golang实现循环链表的示例代码
Sep 14 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
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
解决cPanel无法安装php5.2.17
2014/06/22 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
python用match()函数爬数据方法详解
2019/07/23 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
Python 去除字符串中指定字符串
2020/03/05 Python
python实现梯度下降法
2020/03/24 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
python实现学生信息管理系统源码
2021/02/22 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
澳大利亚相机之家:Camera House
2017/11/30 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
校长就职演讲稿
2014/01/06 职场文书
购房协议书范本
2014/10/02 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript