对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之eval()函数危险性浅析
Jul 03 Python
python字典排序实例详解
May 20 Python
基础的十进制按位运算总结与在Python中的计算示例
Jun 28 Python
浅谈python中的变量默认是什么类型
Sep 11 Python
tornado 多进程模式解析
Jan 15 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
Feb 23 Python
python中实现字符串翻转的方法
Jul 11 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
快速解决vue.js 模板和jinja 模板冲突的问题
Jul 26 Python
python xlwt如何设置单元格的自定义背景颜色
Sep 03 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
Python unittest discover批量执行代码实例
Sep 08 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.ini 中文版
2006/10/28 PHP
PHP Squid中可缓存的动态网页设计
2008/09/17 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
2011/04/20 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
php利用cookie实现自动登录的方法
2014/12/10 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
关于php开启错误提示的总结
2019/09/24 PHP
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
vue实现pdf文档在线预览功能
2019/11/26 Javascript
jquery实现聊天机器人
2020/02/08 jQuery
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
Python常用特殊方法实例总结
2019/03/22 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
详解Python yaml模块
2020/09/23 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
2015年计划生育责任书
2015/05/08 职场文书
出纳试用期工作总结2015
2015/05/28 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript