我可以有两个不同名称的 urls.py 吗?
Posted
技术标签:
【中文标题】我可以有两个不同名称的 urls.py 吗?【英文标题】:Can I have two urls.py with different names? 【发布时间】:2013-01-01 00:26:56 【问题描述】:在 Django 中,是否可以有两个具有 url 模式的不同文件,这两个文件都不称为 urls.py
?或者 Django 是否依赖于每个 Django 应用程序只有一组 url 模式,并且它必须被称为 urls.py
?
我正在使用 Django CMS,我想将一个应用拆分为两个 apphook 和两个菜单。因此,我尝试将urls.py
拆分为pub_urls.py
和train_urls.py
,但我似乎这样做破坏了事情,尽管cms_app.py
命名了正确的网址-例如:
from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _
from resources.menu import TrainingMenu, PublicationMenu
class PublicationApp(CMSApp):
name = _("Publication App") # give your app a name, this is required
urls = ["resources.pub_urls"] # link your app to url configuration(s)
menus = [PublicationMenu]
class TrainingApp(CMSApp):
name = _("Training App") # give your app a name, this is required
urls = ["resources.train_urls"] # link your app to url configuration(s)
menus = [TrainingMenu]
apphook_pool.register(PublicationApp) # register your app
apphook_pool.register(TrainingApp) # register your app
这样的事情可能吗?还是我必须将其拆分为两个不同的应用程序?
【问题讨论】:
【参考方案1】:没有什么可以阻止您的 urls.py
只是充当包含多个其他 url 文件的一种方式:
urls.py
:
from django.conf.urls.defaults import patterns, include
urlpatterns = urlpatterns + patterns('',
(r'^', include('pub_urls')),
(r'^', include('train_urls')))
pub_urls.py
:
from django.conf.urls.defaults import patterns, url
urlpatterns = patterns('',
(r'^$', 'homeview'),
(r'^stuff/$', 'stuffview')
)
等等
ROOT_URLCONF
在您的设置文件中指向根 url 文件。
【讨论】:
【参考方案2】:Django 不在乎你的 urlpatterns 文件叫什么。默认的基本 urlconf 按照惯例称为 urls.py,但实际上它是 just a setting 并且可以被覆盖。之后,您需要通过模块名称显式包含 urlconfs,因此它们的名称也没有区别。
我不熟悉 Django-CMS,也不知道它在它的 CMSApp 类中做了什么,但我怀疑你必须深入研究它才能看到发生了什么。
【讨论】:
【参考方案3】:可使用ROOT_URLCONF
设置进行配置。
From django docs
ROOT_URLCONF
A string representing the full Python import path to your root URLconf.
For example: "mydjangoapps.urls". Can be overridden on a per-request basis
by setting the attribute urlconf on the incoming HttpRequest object. See How
Django processes a request for details.
您还可以编写/获取一个中间件,该中间件可以根据请求中的主机或其他参数进行适当的设置。
【讨论】:
以上是关于我可以有两个不同名称的 urls.py 吗?的主要内容,如果未能解决你的问题,请参考以下文章
django-hosts 强制重新加载不同的 urls.py