具有不同根的 Django URL 模式
Posted
技术标签:
【中文标题】具有不同根的 Django URL 模式【英文标题】:Django URL pattern with different roots 【发布时间】:2011-06-11 20:16:03 【问题描述】:我有两个 URL 模式,它们都存在于我正在设置的同一个应用程序中。
我需要像下面这样的网址才能工作。
http://www.domain.com/p/12345 http://www.domain.com/s/12345但是,它们都存在于同一个 django 应用程序中。
我的主要 urls.py 看起来像这样,用于处理 /p/12345 url。
urlpatterns = patterns('',
(r'^p/', include('myproject.myapp.urls')),
)
和我的应用程序的 urls.py 是相似的。但这仍然只处理 /p/12345 网址。
urlpatterns = patterns('myproject.myapp.views',
(r'^(?P<object_id>\d+)/$', 'some_view'),
)
我的问题是两者几乎相同,只是前缀不同。如何对 /p/12345 和 /s/12345 url 执行此操作。我已经阅读了文档,但无法弄清楚这一点。我想过用 2 个 urls.py 文件来做这件事的“草率”方法,但我知道一定有更好的方法。
【问题讨论】:
【参考方案1】:您可以包含具有空模式的 URL 文件。你可以这样做:
主 urls.py
urlpatterns = patterns('',
(r'foo/', 'foo_view'),
(r'^', include('myproject.myapp.urls')),
)
应用 urls.py
urlpatterns = patterns('puzzlequest.pq.views',
(r'^p/(?P<object_id>\d+)/$', 'some_view'),
(r'^s/(?P<object_id>\d+)/$', 'other_view'),
)
请注意,其他路由(如foo/
)必须先行。
【讨论】:
有没有办法在包含的 URLconf 中定义根路径,即http://www.example.com/
,而不是在根 URLconf 中?似乎无法正常工作。以上是关于具有不同根的 Django URL 模式的主要内容,如果未能解决你的问题,请参考以下文章
Django - urls 中的视图或条件选择两种 url 模式中的一种,以判断参数是不是具有值或为 NONE