在 Django 中创建等效路径 urls.py
Create equivalent paths in Django urls.py
我正在尝试创建 2 个 url 前缀,它们在我的应用程序中是等效的(这是由于某些审美用户要求),但我不确定解决此问题的最佳方法。最直接的选择是使用备用前缀创建另一组 urlpatterns
。然而,这将是重复的并且使维护更加困难。有没有更简单的方法让 foo/<str:key>/
等同于 bar/<str:key>
而 staff/<str:key>/
等同于 foo/<str:key>/staff/
?
当前网址
urlpatterns = [
path('foo/<str:key>/welcome/', views.welcome),
path('foo/<str:key>/dashboard/', views.dashboard),
path('foo/<str:key>/staff/dashboard/', views.staff_dashboard),
]
想要的模式
urlpatterns = [
# Original paths
path('foo/<str:key>/welcome/', views.welcome),
path('foo/<str:key>/dashboard/', views.dashboard),
path('foo/<str:key>/staff/dashboard/', views.staff_dashboard),
# Alternate paths to the same pages
path('bar/<str:key>/welcome/', views.welcome),
path('bar/<str:key>/dashboard/', views.dashboard),
path('staff/<str:key>/dashboard/', views.staff_dashboard),
]
您可以定义一组路径,然后再包含两次:
from django.urls import include, path
<b>sub_paths</b> = [
path('welcome/', views.welcome),
path('dashboard/', views.dashboard),
path('staff/dashboard/', views.staff_dashboard),
]
urlpatterns = [
path('foo/<str:key>/', <b>include(sub_paths)</b>),
path('bar/<str:key>/', <b>include(sub_paths)</b>),
path('staff/<str:key>/dashboard/', views.staff_dashboard),
]
因此,我们在单个列表中定义 foo/
和 bar
一次 的路径,然后多次重复使用这些路径。
也就是说,建议每个视图(带有参数)映射到单个路径,反之亦然。明确了两条不同的路径会走向不同的视图,当视图反转时,结果是什么一目了然。
我正在尝试创建 2 个 url 前缀,它们在我的应用程序中是等效的(这是由于某些审美用户要求),但我不确定解决此问题的最佳方法。最直接的选择是使用备用前缀创建另一组 urlpatterns
。然而,这将是重复的并且使维护更加困难。有没有更简单的方法让 foo/<str:key>/
等同于 bar/<str:key>
而 staff/<str:key>/
等同于 foo/<str:key>/staff/
?
当前网址
urlpatterns = [
path('foo/<str:key>/welcome/', views.welcome),
path('foo/<str:key>/dashboard/', views.dashboard),
path('foo/<str:key>/staff/dashboard/', views.staff_dashboard),
]
想要的模式
urlpatterns = [
# Original paths
path('foo/<str:key>/welcome/', views.welcome),
path('foo/<str:key>/dashboard/', views.dashboard),
path('foo/<str:key>/staff/dashboard/', views.staff_dashboard),
# Alternate paths to the same pages
path('bar/<str:key>/welcome/', views.welcome),
path('bar/<str:key>/dashboard/', views.dashboard),
path('staff/<str:key>/dashboard/', views.staff_dashboard),
]
您可以定义一组路径,然后再包含两次:
from django.urls import include, path
<b>sub_paths</b> = [
path('welcome/', views.welcome),
path('dashboard/', views.dashboard),
path('staff/dashboard/', views.staff_dashboard),
]
urlpatterns = [
path('foo/<str:key>/', <b>include(sub_paths)</b>),
path('bar/<str:key>/', <b>include(sub_paths)</b>),
path('staff/<str:key>/dashboard/', views.staff_dashboard),
]
因此,我们在单个列表中定义 foo/
和 bar
一次 的路径,然后多次重复使用这些路径。
也就是说,建议每个视图(带有参数)映射到单个路径,反之亦然。明确了两条不同的路径会走向不同的视图,当视图反转时,结果是什么一目了然。