Django urls.py:将动态 url 参数传递给 include()
Django urls.py: passing dynamic url parameter into include()
我在 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': ???}),
]
可能吗?
你没有指定kwargs
,所以你写:
from django.urls import include, path
urlpatterns = [
# <i>no</i> { 'blog_id': … }
path('blog/<b><int:blog_id></b>/', include('inner')),
]
url 参数将传递给包含的视图的 kwargs。
documentation on Including other URLconfs 在某种程度上讨论了这一点,它说:
(…) For example, consider this 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),
]
We can improve this by stating the common path prefix only once and
grouping the suffixes that differ:
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),
])),
]
我在 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': ???}),
]
可能吗?
你没有指定kwargs
,所以你写:
from django.urls import include, path
urlpatterns = [
# <i>no</i> { 'blog_id': … }
path('blog/<b><int:blog_id></b>/', include('inner')),
]
url 参数将传递给包含的视图的 kwargs。
documentation on Including other URLconfs 在某种程度上讨论了这一点,它说:
(…) For example, consider this 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), ]
We can improve this by stating the common path prefix only once and grouping the suffixes that differ:
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), ])), ]