对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 13 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
解决pycharm 误删掉项目文件的处理方法
Oct 22 Python
Python字典的核心底层原理讲解
Jan 24 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
创建Django项目图文实例详解
Jun 06 Python
Python hashlib常见摘要算法详解
Jan 13 Python
Python读取表格类型文件代码实例
Feb 17 Python
Python3如何在服务器打印资产信息
Aug 27 Python
几款好用的python工具库(小结)
Oct 20 Python
Python图像读写方法对比
Nov 16 Python
python wsgiref源码解析
Feb 06 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实现的随机IP函数【国内IP段】
2016/07/20 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
javascript回调函数详解
2018/02/06 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
node.js 如何监视文件变化
2020/09/01 Javascript
python统计一个文本中重复行数的方法
2014/11/19 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
Python之时间和日期使用小结
2019/02/14 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
python实现与redis交互操作详解
2020/04/21 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
销售人员求职信
2014/07/22 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书
Anaconda配置各版本Pytorch的实现
2021/08/07 Python
python语言中pandas字符串分割str.split()函数
2022/08/05 Python