Django4.0 URL调度器-传递额外选项给视图函数
URLconfs 有钩子来允许你把其他参数作为 Python 字典来传递给视图函数。
path()
函数可带有可选的第三参数(必须是字典),传递到视图函数里。
例如:
from django.urls import path
from . import views
urlpatterns = [
path('blog/<int:year>/', views.year_archive, {'foo': 'bar'}),
]
在这个例子里,当请求到 /blog/2005/
时,Django 将调用 views.year_archive(request, year=2005, foo='bar')
。
传递额外选项给 include()
同样的,你可以额外其他选项给 include()
,并且已包含的 URLconf 里的每一行将被传递额外选项。
例如,下面两个 URLconf 配置在功能上是相同的:
配置一:
# main.py
from django.urls import include, path
urlpatterns = [
path('blog/', include('inner'), {'blog_id': 3}),
]
# inner.py
from django.urls import path
from mysite import views
urlpatterns = [
path('archive/', views.archive),
path('about/', views.about),
]
配置二:
# main.py
from django.urls import include, path
from mysite import views
urlpatterns = [
path('blog/', include('inner')),
]
# inner.py
from django.urls import path
urlpatterns = [
path('archive/', views.archive, {'blog_id': 3}),
path('about/', views.about, {'blog_id': 3}),
]
注意额外的选项会一直传递给所包含的 URLconf 的每一行,不管视图是否接受这些额外选项。因此,这个技巧仅在确定所包含的 URLconf 中的每一个视图接受你传递的额外选项时有用。