我在Django文档(https://docs.djangoproject.com/en/3.0/topics/http/urls/#passing-extra-options-to-include)中发现,我可以将任何常量传递给include()
语句。在文档的示例中,我们正在传递blog_id=3
。
from django.urls import include, path
urlpatterns = [
path('blog/', include('inner'), {'blog_id': 3}),
]
但是如果我想将动态url参数传递到include()
,该怎么办?我的意思是这样的:
from django.urls import include, path
urlpatterns = [
path('blog/<int:blog_id>/', include('inner'), {'blog_id': ???}),
]
有可能吗?
您执行not指定kwargs
,所以您写:
from django.urls import include, path
urlpatterns = [
# no { 'blog_id': … }
path('blog/<int:blog_id>/', include('inner')),
]
URL参数将传递到所包含视图的kwargs。
[在某种程度上,documentation on Including other URLconfs中对此进行了讨论:
(...)例如,考虑以下URLconf:
from django.urls import path from . import views urlpatterns = [ path('<page_slug>-<page_id>/history/', views.history), path('<page_slug>-<page_id>/edit/', views.edit), path('<page_slug>-<page_id>/discuss/', views.discuss), path('<page_slug>-<page_id>/permissions/', views.permissions), ]
我们可以通过只声明一次公共路径前缀来改善这一点,对不同的后缀进行分组:
from django.urls import include, path from . import views urlpatterns = [ path('<page_slug>-<page_id>/', include([ path('history/', views.history), path('edit/', views.edit), path('discuss/', views.discuss), path('permissions/', views.permissions), ])), ]