【问题标题】:Django 1.4 new project folder structure forces project prefixes?Django 1.4 新项目文件夹结构强制项目前缀?
【发布时间】:2012-02-09 14:01:51
【问题描述】:

使用 django 1.4 并看到当您使用 startproject 时,它现在会在您的项目中创建一个同名文件夹。

-myproject/
           manage.py
           myproject/
                    settings.py
                    urls.py

Documented change here

以前我可以输入的网址

ROOT_URLCONF = 'urls'

但这不再有效。我现在应该用项目名称作为前缀吗?即

ROOT_URLCONF = 'myproject.urls'

-- 在我的urls.py 中,我会导入设置,但现在我必须在它前面加上from myproject import settings

我认为用项目名称作为前缀的变量违反了 django 标准,因为它破坏了可重用性?

【问题讨论】:

    标签: django


    【解决方案1】:

    我只想补充一点,当您访问主要的myproject.urls 时,它会强制您使用前缀,但它不会强制您使用任何一种方式来使用您的应用程序。您可以选择将应用程序存储在顶级文件夹中:

    myproject
    |-- manage.py
    |-- myproject
    |   |-- __init__.py
    |   |-- settings.py
    |   |-- urls.py
    |   `-- wsgi.py
    `-- polls
        |-- __init__.py
        |-- models.py
        |-- tests.py
        `-- views.py
    

    这是您使用 python manage.py startapp polls 时的默认设置 在这种情况下,您将使用 from polls.models import Whatever

    或者,您可以:

    mkdir myproject/polls
    python manage.py startapp polls myproject/polls
    

    你会得到这个:

    myproject
    |-- manage.py
    `-- myproject
        |-- __init__.py
        |-- polls
        |   |-- __init__.py
        |   |-- models.py
        |   |-- tests.py
        |   `-- views.py
        |-- settings.py
        |-- urls.py
        `-- wsgi.py
    

    在这种情况下,您必须from myproject.polls.models import Whatever...

    因此,前者更适合您认为可以在其他项目中重复使用的应用,后者更适合与项目其他部分紧密耦合的应用。

    【讨论】:

    • 很好的阐述。谢谢你。
    【解决方案2】:

    是的,在 ROOT_URLCONF 前加上您的项目名称:

    ROOT_URLCONF = 'myproject.urls'
    

    无论如何,您都不应该直接导入设置(请参阅Using settings in Python code)。相反,请使用以下内容,它适用于新旧项目布局。

    from django.conf import settings
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 2018-03-11
      • 2020-09-11
      • 2011-01-17
      • 2011-07-07
      • 1970-01-01
      • 2011-01-31
      相关资源
      最近更新 更多