我可以使用两个名称不同的urls.py吗?

时间:2013-01-17 12:49:52

标签: django django-urls django-cms

在Django中,是否有可能有两个不同的url模式文件,这两个文件都不称为urls.py?或者Django是否依赖每个Django应用程序只有一组url模式,并且它必须被称为urls.py

我正在使用Django CMS,我希望将应用程序拆分为两个apphooks和两个菜单。所以我尝试将urls.py拆分为pub_urls.pytrain_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

这样的事情可能吗?或者我是否必须将其拆分为两个不同的应用程序?

3 个答案:

答案 0 :(得分:7)

没有什么可以阻止你的urls.py只是作为一种包含多个其他网址文件的方式:

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指向根网址文件。

答案 1 :(得分:4)

Django不关心你的urlpatterns文件被调用了什么。默认的基本urlconf按惯例称为urls.py,但事实上它是just a setting并且可以被覆盖。之后,您需要按模块名称明确包含urlconfs,因此再次调用它们没有区别。

我不熟悉Django-CMS,我不知道它在CMSApp课程中做了什么,但我怀疑你将不得不深入研究它是什么。

答案 2 :(得分: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.

您还可以编写/获取可根据请求中的主机或其他参数进行适当设置的中间件。