在 Django 中的两个不同 URL confs 中使用整套视图
Use entire set of views in two different URL confs in Django
我正在构建一个显示电视 Shows
和 Episodes
的网络应用程序。我所有的网址都以电视节目为顶级概念:
- 我的网站。com/tv-show-name/episode-name
- mysite.com/tv-show-name/episode-name/cast
- 我的网站。com/tv-show-name/episode-name/评论
Networks
我对将其节目作为子目录的合并页面感兴趣
- 我的网站。com/network-name/tv-show-name/episode-name
- mysite.com/network-name/tv-show-name/episode-name/cast
- 我的网站。com/network-name/tv-show-name/episode-name/评论
我需要同时支持两者,显然我不想重复我所有的非网络 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 是在电视节目级别还是网络级别,它都会触发相应的视图。
我正在构建一个显示电视 Shows
和 Episodes
的网络应用程序。我所有的网址都以电视节目为顶级概念:
- 我的网站。com/tv-show-name/episode-name
- mysite.com/tv-show-name/episode-name/cast
- 我的网站。com/tv-show-name/episode-name/评论
Networks
我对将其节目作为子目录的合并页面感兴趣
- 我的网站。com/network-name/tv-show-name/episode-name
- mysite.com/network-name/tv-show-name/episode-name/cast
- 我的网站。com/network-name/tv-show-name/episode-name/评论
我需要同时支持两者,显然我不想重复我所有的非网络 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 是在电视节目级别还是网络级别,它都会触发相应的视图。