代码之家  ›  专栏  ›  技术社区  ›  Ian Carpenter

如何设置STATIC_ROOT和MEDIA_ROOT,以便使用的路径不是硬编码的?

  •  5
  • Ian Carpenter  · 技术社区  · 12 年前

    在我的settings.py文件中 STATIC_ROOT 和 MEDIA_ROOT 两者当前都指向硬编码位置。例如 静态根 路径为:

    /home/ian/projectname/mysite/appname/static
    

    我知道当我部署项目时,这会导致问题。

    环顾四周,我发现我需要利用 os.path 但无数的例子让我困惑。

    我试图查看设置此文件的不同排列(或获取用于设置BASE_DIR的示例值),但屏幕截图显示我缺少了一些内容,因为它在抱怨 文件 价值

    如果需要,我正在使用Django 1.6

    提前感谢。

    enter image description here

    2 回复  |  直到 12 年前
        1
  •  5
  •   Eje Max    8 年前

    首先,由于附加了 __file__ 在交互式shell中:

    NameError: name '__file__' is not defined
    

    shell未检测到中的当前文件路径 __文件__ 因为它与您的 filepath 在其中添加了这行。例如,要工作,您需要在 file.py :

    os.path.join(os.path.dirname(__file__))
    

    然后,从命令行运行该命令:

    python file.py
    

    这是因为 __文件__ 与 文件路径 属于 文件.py 是

    假使 settings.py ,使用此命令获取Django项目的根目录:

    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    

    然后可以使用 os.path.join() 连接其他相对路径,例如:

    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates')
    

    有关如何布局Django项目目录的更多信息,请阅读以下内容: Common structures

        2
  •  3
  •   alecxe    12 年前

    通常的做法(建议在 django official tutorial 也)是有一个 BASE_DIR 从 __file__ :

    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    

    然后,使用 os.path.join() 构建其他相对路径,例如:

    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    

    请注意 __文件__ 仅对模块可用,在控制台上使用它没有意义。