2

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

我正在使用 Django CMS,我想将一个应用程序拆分为两个 apphook 和两个菜单。因此,我尝试拆分urls.pypub_urls.py,但尽管命名了正确的 url ,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

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

4

3 回答 3

7

没有什么可以阻止您urls.py简单地充当包含多个其他 urls 文件的方式:

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 文件。

于 2013-01-17T13:09:07.430 回答
4

Django 不在乎你的 urlpatterns 文件叫什么。默认的基本 urlconf 按照惯例称为 urls.py,但实际上这只是一个设置,可以被覆盖。之后,您需要按模块名称显式包含 urlconfs,因此它们的名称也没有区别。

我不熟悉 Django-CMS,也不知道它在它的 CMSApp 类中做了什么,但我怀疑你必须深入研究它才能看到发生了什么。

于 2013-01-17T13:06:11.727 回答
3

它可以使用ROOT_URLCONF设置进行配置。

来自 django 文档

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.

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

于 2013-01-17T13:08:37.830 回答