django url 参数详解
通常我们建立一个django项目后, 其中重要的一步就是配置url, 一直原来对url了解的不是太多.今天详细研究一下.
from django.conf.urls import include, url
from django.contrib import admin
from web import views
urlpatterns = [
# Examples:
# url(r'^$', 's11bbs.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
]
上面是我建立项目之后,默认的url配置
url(regex, view, kwargs=None, name=None, prefix=''):
.......
这是url的源码
在URL请求达到django的路由系统的时候,也就是 url , 首先会匹配对应的regex, 如果匹配到了,就会执行 对应该条 regex 的views函数 .
regex
代表一个正则表达式, 如果 请求的URL 为 http://www.timesnotes.com/ 那么对应的url 为
url(r'^$', views.index,name="index"),
在这里我们还可以向后面的函数传递参数, 前面的文章有写 ,这里也会在简单的介绍一下.
view
url 正则匹配成功后, 就会执行相应的视图函数,django 使用用HttpResponse 对象作为第一个参数传递给views, 当 reges 参数中 带有参数时, 可以将其作为可选参数传递给views,
例:
url(r'^/index/(\d+)$', views.index,name="index"),
那么 括号里的 (\d+) 将会被作为地格纹参数传递给 view.index 函数,即 index(request, val) # val 对应(\d+)
注意:
如果我在传递参数的时候,给参数指定了名称,那么url 和views函数中的参数名称就必须保持一致.
例
url(r'^(?P<my_id>\d+)/$', views.get_id, name='GetID'),
此时,括号里对应的 (?P<my_id>\d+) 将作为第二个参数传递给 views.get_id函数,
即 get_id(request,my_id) 这里的参数名称 必须前后一致.
name
在我们设置urlconf的时候, 我们可能会遇到这种情况, 即 多条url conf 使用 同一视图函数. 这样在使用templates 系统的时候, 如果我们使用硬编码的方式 写代码, 模板将变得难以维护,
例1 在rulconf 使用如下配置的时候
url(r'^/index/$', views.index,name="index"),
{% url views.index %} 中 的views.index 将返回 对应的 regex “/index/"
例2
url(r'^/index/(\d+)$', views.index,name="index"),
url(r'^/index-add/(\d+)$', views.index,name="indexAdd"),
此时 {% url views.index %} 想使用views函数名来返回url 的时候,就会遇到问题。
这个时候 name 参数的作用就体现出来了。 name 可以 用来 区别多个url 对应多个views函数的情况。 通过name 来反向获取URL。
我们可以使用如下的方式 获取对应的url
{% url index 1990 %}
{% url indexAdd 2000 %}
kwargs
是一个子典型的参数,使用方式如下:
url(r'^/index-add/(\d+)$', views.index,{"memo":True},name="indexAdd"),
这里的kwargs 就是{”memo":True}
在对应的视图函数中 的使用方式为:
def index(request,val,memo):......
转载于:https://blog.51cto.com/timesnotes/1757946