3、url路由中传递额外参数

给视图函数指向传入第三个参数

URL 配置允许向视图函数传递额外的参数,这些参数放在一个Python字典中。django.conf.urls.url()函数的第三个参数是可选的,如果指定,应该是一个字典,指定要传给视图函数的额外关键字参数及其值。例如:

from django.conf.urls import re_path
from . import views

urlpatterns = [
    re_path(r'^reviews/(?P<year>[0-9]{4})/$',views.year_archive,{'foo': 'bar'}),
]

对于上面的代码来说,当请求/reviews/2005/ 时,等价于调用views.year_archive(request, year=‘2005’,foo=‘bar’)

处理冲突:可能 URL 模式捕获了具名关键字参数,又在第三个参数中传递同名的参数。此时,Django使用字典中的参数,而不是从 URL 中捕获的参数。

给include() 传递额外参数

为include() 传递额外参数时,被引入的URL配置中的每一行都将收到额外的参数

下面两种配置是等价的

  • 第一个 URL 配置
# project>codemao>urls.py
from django.conf.urls import include, re_path
urlpatterns = [
    re_path(r'^reviews/', include('wood.urls'), {'reviewid': 3}),
]

# app>wood>urls.py
from django.conf.urls import re_path
from wood import views

urlpatterns = [
    re_path(r'^archive/$', views.archive),
    re_path(r'^about/$', views.about),
]
  • 第二个URL配置
# project>codemao>urls.py
from django.conf.urls import include, re_path
from mysite import views

urlpatterns = [
    re_path(r'^reviews/', include('wood.urls')),
]

# app>wood>urls.py
from django.conf.urls import re_path

urlpatterns = [
    re_path(r'^archive/$', views.archive, {'reviewid': 3}),
    re_path(r'^about/$', views.about, {'reviewid': 3}),
]

注意,不管 URL 模式是否能接收参数,额外的参数都将传给被引入的 URL 配置的每个模式。鉴于此,仅当
确定被引入的 URL 配置中的每个视图都接收传入的额外参数时,才应该这么做

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值