在 Django 中的两个不同 URL confs 中使用整套视图

Use entire set of views in two different URL confs in Django

我正在构建一个显示电视 ShowsEpisodes 的网络应用程序。我所有的网址都以电视节目为顶级概念:

Networks 我对将其节目作为子目录的合并页面感兴趣

我需要同时支持两者,显然我不想重复我所有的非网络 URL 配置。有没有简单的方法可以做到这一点?

定义后再次遍历 urlpatterns 列表。

然后 str.replace() 用于 url 并追加到现有列表?

要使 url 中的关键字 name=<your_url_name> 保持唯一性,请添加前缀以将网络与电视分开。

您可以多次包含相同的 url 模式。在您的情况下,您可以在有和没有网络名称前缀的情况下包含它们

from django.urls import path, include

episode_patterns = [
    path('<str:tv_show_name>/<str:episode_name>/', episode_detail),
    path('<str:tv_show_name>/<str:episode_name>/cast/', episode_cast),
    path('<str:tv_show_name>/<str:episode_name>/reviews/', episode_reviews),
]

urlpatterns = [
    path('<str:network_name>/', include(episode_patterns)),
    path('', include(episode_patterns)),
]

您可能需要考虑在您的路径中包含“前缀”,以便它们更加明确。就目前而言,匹配 url 可能相当混乱

from django.urls import path, include

episode_patterns = [
    path('show/<str:tv_show_name>/episode/<str:episode_name>/', episode_detail),
    path('show/<str:tv_show_name>/episode/<str:episode_name>/cast/', episode_cast),
    path('show/<str:tv_show_name>/episode/<str:episode_name>/reviews/', episode_reviews),
]

urlpatterns = [
    path('network/<str:network_name>/', include(episode_patterns)),
    path('', include(episode_patterns)),
]

这会给你 url 个赞

  • 我的网站。com/show/tv-show-name/episode/episode-name/
  • 我的网站。com/network/network-name/show/tv-show-name/episode/episode-name/

这样的事情怎么样:

urlpatterns = [
    path('<tv-show-name>', render_your_view, name='tv-show'),
    path('<network-name>/<tv-show-name>', render_your_view, name='network'),
]

因此无论所请求的 URL 是在电视节目级别还是网络级别,它都会触发相应的视图。