Django urls.py:将动态url参数传递到include()

问题描述 投票:1回答:1

我在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': ???}),
]

有可能吗?

django django-urls
1个回答
1
投票

您执行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),
    ])),
]
© www.soinside.com 2019 - 2024. All rights reserved.