Django url 参数及name参数介绍

url()函数可以被传入4个参数,两个是必须的:regex和view,两个是可选的:kwargs和name,下面来看一下这些参数是干啥的。

url()参数:regex
“regex”经常被用作正则表达式的缩写,正则表达式是一种对字符串进行模式匹配的语法,对于我们而言,就是对url模式的匹配。Django会把请求的url从第一条正则表达式开始匹配,直到找到一个可以匹配上的正则表达式为止。
需要注意的是,正则表达式并不查询get或者post参数,以及域名,例如,当请求指向https://www.example.com/myapp/,URLconf会查找myapp/。当请求指向https://www.example.com/myapp/?page=3, URLconf还是会查找myapp/
另外,如果您需要正则表达式的帮助,请参阅re模块的文档,然而,实际上,您不需要是正则表达式的专家,因为您只需要知道如何捕获简单的模式。实际上,复杂的正则表达式的查找性能会很差,所以你可能不应该依靠正则表达式的全部功能。最后,一个性能说明:这些正则表达式是第一次加载URLconf模块时被编译。它们超级快(只要查找不是太复杂,如上所述)。

url()参数:view
当正则表达式被匹配,view函数就会被调用。而且HttpRequest对象会作为第一个参数,其它被正则表达式捕获的值会作为其它参数传入到函数中。

url()参数:kwargs

其它的参数以字典的形式传入

url()参数:name

给你的url起个名字能让你在其它地方明确引用它。这个强大的功能可以让你在修改URL模式的同时只修修改单个文件 。(好吧,没看懂,那我们举个列子:)

创建一个django项目后,添加一个模板页:


URL配置如下:


我们计算加法的时候用的是 /add/4/5/ ,后来需求发生变化,比如改成 /4_add_5/,但在网页中,代码中很多地方都写死的 /add/4/5/。如果这样写“死网址”,会使得在改了网址(正则)后,模板(template),视图(views.py,用以用于跳转),模型(models.py,可以用用于获取对象对应的地址)用了此网址的,
都得进行相应的更改,修改的代价很大,一不小心,有的地方没改过来,就不能用了。那么有没有更优雅的方式来解决这个问题呢?当然答案是肯定的

使用:

<a href="{% url 'add2' 4 5 %}">link</a>
上面的代码渲染成最终的页面是:
<a href="/add/4/5/">link</a>

这样就可以通过 {% url 'add2' 4 5 %} 获取到对应的网址 /add/4/5/
当 urls.py 进行更改,前提是不改 name(这个参数设定好后不要轻易改),获取的网址也会动态地跟着变,比如改成:

url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),
注意看重点 add 变成了 new_add,但是后面的 name='add2' 没改,这时 {% url 'add2' 4 5 %} 就会渲染对应的网址成 /new_add/4/5/
用在 views.py 或 models.py 等地方的 reverse函数,同样会根据 name 对应的url获取到新的网址。
想要改网址的时候,修改 urls.py 中的正则表达式部分(url 参数第一部分),name 不变的前提下,其它地方都不需要修改

备注:生成url的函数reverse:

from django.core.urlresolvers import reverse  # django 1.4.x - django 1.10.x
from django.urls import reverse  # django 1.10.x 新的,更加规范了
reverse('add2', args=(4,5))
u'/add/4/5/'
reverse('add2', args=(444,555))
u'/add/444/555/'
reverse 接收 url 中的 name 作为第一个参数,我们在代码中就可以通过 reverse() 来获取对应的网址(这个网址可以用来跳转,也可以用来计算相关页面的地址),只要对应的 url 的name不改,就不用改代码中的网址。

参考:http://code.ziqiangxuetang.com/django/django-url-name.html

所有的努力都值得期许,每一份梦想都应该灌溉!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,您想了解 Django 框架中 urlpatterns 参数的说明。 在 Django 中,urlpatterns 是一个列表,其中包含 URL 规则和视图函数之间的映射关系。它的主要作用是将 URL 请求映射到视图函数,从而实现 URL 路由。urlpatterns 的每个元素都是一个包含 URL 规则和视图函数的元组。其中 URL 规则是一个字符串,用于匹配 URL 请求,视图函数是用于处理匹配的请求的函数。 urlpatterns 可以通过正则表达式来匹配 URL 请求,也可以直接匹配 URL 字符串。在 urlpatterns 中,可以使用许多不同的 Django 视图函数,例如: - 函数视图:定义为普通 Python 函数。 - 类视图:基于类的视图,继承自 Django 的 View 类。 - 带有参数的视图:可以使用正则表达式来提取 URL 中的参数,并将其传递给视图函数。 除了视图函数之外,urlpatterns 还可以包含其他参数,例如 name 参数,用于给 URL 命名,方便在模板中引用。 例如,下面是一个简单的 urlpatterns 列表的示例: ```python from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('blog/<int:blog_id>/', views.blog_detail, name='blog_detail'), ] ``` 在上面的代码中,urlpatterns 列表包含了两个元素。第一个元素是一个空字符串,表示根路径。它将请求映射到名为 index 的视图函数。第二个元素是一个带有参数URL 规则,用于匹配形如 /blog/<blog_id>/ 的 URL 请求,并将 blog_id 参数传递给名为 blog_detail 的视图函数。这个 URL 规则使用了 int 类型的正则表达式,用于匹配整数类型的参数。 希望这能够帮助您理解 urlpatterns 参数的作用和用法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值