具有不同根的 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

在 Django 中将不同的模板呈现为相同的 URL 模式

Django 排除 url 模式

如何使用 django 在 mysql 中的两个不同模式中使用两个具有相同名称的表

Django url 模式 - 字符串参数

Django:未找到反向URL模式