django项目根自我发现

Use*_*er0 30 django

好的,我记得有一些命令你可以放在settings.py文件中,所以基本上当你将你的django项目移动到另一个目录时,它不会得到foo-bar'd.

我知道我可以通过在它提到主目录的地方有一个字符串变量来做到这一点,但有更优雅的方法吗?

rom*_*rom 86

Django项目的架构

  • 根/

    • APP1 /
    • APP 2 /
    • ...
    • 主要/
      • settings.py

在settings.py内:

SITE_ROOT = os.path.dirname(os.path.realpath(__file__))- >给出文件settings.py:root / main /的路径.这不是项目的根本

PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))- >给出项目的根:root /.这是项目的根本.

  • 这是一个老问题,当时 django 的文件结构是不同的。你是怎么找到这个的?:) 在我问它的时候它也被贬低了。不过谢谢。由于您提供了新信息,我会为您 +1。 (2认同)

avi*_*avi 45

Django 1.8已经包含项目根目录BASE_DIR:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
Run Code Online (Sandbox Code Playgroud)

您可以通过导入在您的应用中使用它settings:

from django.conf import settings
...
...
print(settings.BASE_DIR)
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 39

抓住__file__全局,并使用其中的各种功能os.path.

import os.path
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
Run Code Online (Sandbox Code Playgroud)

  • 创建一个lambda函数非常有用,你可以在以后使用SITE_ROOT变量:rel = lambda p:os.path.join(SITE_ROOT,p)你可以使用它:MEDIA_ROOT = rel('static_media') (3认同)

小智 12

PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))
Run Code Online (Sandbox Code Playgroud)