对Django url的几种使用方式详解

利用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的几种使用方式详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2019-08-05

Django 反向生成url实例详解

Django中提供了一个关于URL的映射的解决方案, 1.客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,调用相应的试图,获取相应的数据,然后返回给客户端显示 2.通过一个视图的名字,再加上一些参数和值,逆向获取相应的URL 第一个就是平常的请求有URLconf来解析的过程, 第二个叫做,url的逆向解析,url逆向匹配,url的逆向查阅,等 Django提供了不同的层级的url逆向处理工具: 1.在模板templates中,使用url标记,如:{% url

Django 1.10以上版本 url 配置注意事项详解

在改造旧版本django cms程序从 pyton2.7, django 1.8版本升到 python 3.5,django 1.11版本的时候,原以为会非常轻松,却不想在URL配置上就卡住了我一会.在djang 1.10版本之后,url.py 里面的配置发生了变化,我记得以前我记录过,但过了一段时间自己却忘记了. django 1.10之后,在url.py 中配置view的方法,最好采用as 方式了,否则会报如下错误.打个比方: from appcms.modules import photo

详解django中url路由配置及渲染方式

今天我们学习如何配置url.如何传参.如何命名.以及渲染的方式,内容大致有以下几个方面. 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式 创建视图并访问 项目中自带的Python文件中,并没有带有视图,因此我们自己创建一个,通常,我们把视图命名views.py. 然后在views.py中,导入头文件 from django.http import HttpResponse 然后我们在views.py中,写一些Python函数,用来访

在Django中URL正则表达式匹配的方法

Django框架中的URL分发采用正则表达式匹配来进行,以下是正则表达式的基本规则: 官方演示代码: from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/

Django中URL的参数传递的实现

在Django中有非常强大的URL模块,可以按照开发者的想法来制定清晰的URL,同时支持正则表达式.此外,在URL中还可以传递参数. 1. Django处理请求的方式 1) Django通过URLconf模块来进行判断.通常情况下,这就是ROOT_URLCONF配置的价值,但是如果请求携带了一个urlconf的属性(通常被中间件设置),那么这个被携带的urlconf将会替代ROOT_URLCONF的配置. 2) Django会调用Python模块并寻找各种urlpatterns.这是一个属于dj

Django中url的反向查询的方法

本文介绍了Django中url的反向查询的方法,分享给大家,具体如下: 明确几个概念: 1.application namespace : 正在部署的app的名称,一个app的多个实例应该具有相同的application namespace. 可以通过在URLconf模块(urls.py)中设置 app_name 属性(与urlpatterns属性同级)来指定application namesapce. (在django2.0版本中必须设置 app_name ) 2.instance names

django中url映射规则和服务端响应顺序的实现

 1.django搜索路径 使用 import 语句时,Python 所查找的系统目录清单. 查看方式: import sys print sys.path 通常无需关心 Python 搜索路径的设置,Python 和 Django 会在后台自动帮你处理好. 2.url匹配模式 基本结构: '^需要匹配的url字符串$' PS:实际上最终完整的url串是http://根路径:端口号/需要匹配的url字符串 系统自动添加的部分'http://根路径:端口号/' eg:url匹配模式:'^lates

Django中URL视图函数的一些高级概念介绍

说到关于请求方法的分支,让我们来看一下可以用什么好的方法来实现它. 考虑这个 URLconf/view 设计: # urls.py from django.conf.urls.defaults import * from mysite import views urlpatterns = patterns('', # ... (r'^somepage/$', views.some_page), # ... ) # views.py from django.http import Http404,

django中的HTML控件及参数传递方法

本文对djangoHTML的表单控件中的单选及多选进行介绍,并说明如何进行参数传递. 1.HTML中的表单控件: 在HTML中表单的书写一般为: <form method="post" action=""> 这个method代表方法,方法一般有两个一个是'post',一个是'get',action是提交表单到何处,可填写一个网址.不填则默认到本页面. {%csrf_token%} 这个是django中的一个标签,用于防止恶意攻击使用,如果不加入这个标签,

Django模板标签中url使用详解(url跳转到指定页面)

django {% url %} 模板标签使用 inclusions/_archives.html ... {% for date in date_list %} <li> <a href="{% url 'blog:archive' date.year date.month %}" rel="external nofollow" > {{ date.year }} 年 {{ date.month }} 月 </a> </l

Django中使用jquery的ajax进行数据交互的实例代码

jquery框架中提供了$.ajax.$.get.$.post方法,用于进行异步交互,由于Django中默认使用CSRF约束,推荐使用$.get 示例:实现省市区的选择 最终实现效果如图: 将jquery文件拷贝到static/js/目录下 打开booktest/views.py文件,定义视图area1,用于显示下拉列表 #提供显示下拉列表的控件,供用户操作 def area1(request): return render(request,'booktest/area1.html') 打开bo

浅谈django中的认证与登录

认证登录 django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1  authenticate(**credentials)    提供了用户认证,即验证用户名以及密码是否正确 一般需要username  password两个关键字参数 如果认证信息有效,会返回一个  User  对象.authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的.当我们试图登陆一个从数据库中直接取出来不经过authent