【问题标题】:What is the path for TEMPLATE_DIRS in django settings.py when using virtualenv使用 virtualenv 时 django settings.py 中 TEMPLATE_DIRS 的路径是什么
【发布时间】:2012-08-10 23:39:31
【问题描述】:

我正在使用 virtualenv,我想知道 settings.py 中的 TEMPLATE_DIRS 应该是什么,例如,如果我在项目文件夹的根目录中创建了一个模板文件夹。

【问题讨论】:

    标签: python virtualenv


    【解决方案1】:

    TEMPLATE_DIRS 已弃用 自 Django 版本 1.8 起,此设置已被弃用。

    deprecated

    """ settings.py """
    
    TEMPLATE_DIRS = (
        os.path.join(BASE_DIR, 'templates/'),
    )
    

    correct

    """ settings.py """
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [ os.path.join(BASE_DIR, 'templates') ],
            'APP_DIRS': True,
            ...
        },
    ]
    

    【讨论】:

      【解决方案2】:

      在 web/settings.py 中添加它为我解决了所有问题。希望对你也有帮助。

      import os
      BASE_DIR = os.path.dirname(os.path.dirname(__file__))
      from os.path import join
      TEMPLATE_DIRS = (
          join(BASE_DIR,  'templates'),
      )
      

      【讨论】:

      【解决方案3】:

      如果您使用的是较新版本的 Django,您可能需要将其添加到位于 TEMPLATES 下的 settings.py 内的 DIR 列表中。

      TEMPLATES = [
          {
              'BACKEND': 'django.template.backends.django.DjangoTemplates',
              'DIRS': ['[project name]/templates'], # Replace with your project name
              'APP_DIRS': True,
              'OPTIONS': {
                  'context_processors': [
                      'django.template.context_processors.debug',
                      'django.template.context_processors.request',
                      'django.contrib.auth.context_processors.auth',
                      'django.contrib.messages.context_processors.messages',
                  ],
              },
          },
      ]
      

      【讨论】:

      • 'DIRS': ['[project name]/templates'], # Replace with your project name 不带括号的项目名称:'project name/templates'
      • 括号表示您输入特定项目名称的位置。
      【解决方案4】:

      如果您使用的是 Django 1.9,建议使用 BASE_DIR 而不是 PROJECT_DIR。

      # add at the beginning of settings.py
      import os
      
      # ...
      
      TEMPLATE_DIRS = (
          os.path.join(BASE_DIR, 'templates/'),
      )
      

      【讨论】:

        【解决方案5】:

        PROJECT_DIR 尚未定义... PROJECT_DIR 不是变量。它是文件夹“模板”所在的目录/路径。这应该会有所帮助

        import os
        PROJECT_DIR = os.path.dirname(os.path.dirname(__file__))
        TEMPLATE_DIRS = os.path.join(PROJECT_DIR, 'templates')
        

        【讨论】:

        • TEMPLATE_DIRS 设置必须是列表或元组。
        【解决方案6】:

        您需要指定模板文件夹的绝对路径。始终使用正斜杠,即使在 Windows 上也是如此。

        例如,如果您的项目文件夹是“/home/djangouser/projects/myproject”(Linux)或“C:\projects\myproject\”(Windows),那么您的 TEMPLATE_DIRS 如下所示:

            # for Linux
            TEMPLATE_DIRS = (
                '/home/djangouser/projects/myproject/templates/',
            )
        
            # or for Windows; use forward slashes!
            TEMPLATE_DIRS = (
                'C:/projects/myproject/templates/',
            )
        

        或者,您可以使用指定的 PROJECT_ROOT 变量并通过将其与模板文件夹的相对路径连接来生成绝对路径。这样做的好处是,如果您将项目复制到不同的位置,您只需要更改 PROJECT_ROOT。您需要导入 os 模块才能使其工作:

        # add at the beginning of settings.py
        import os
        
        # ...
        
        TEMPLATE_DIRS = (
            os.path.join(PROJECT_ROOT, 'templates/'),
        )
        

        【讨论】:

        • 感谢您的回答。它说 PROJECT_ROOT 没有为第二个答案定义。
        • 我的项目文件夹在 /Users/andrewwelch/Sites/env/ 我想如果我把它放到远程服务器上我必须改变它
        • 是的,我的错。我注意到 PROJECT_ROOT 不是标准变量,是我添加到我查找的 settings.py 中的。和这里的建议基本一样:stackoverflow.com/questions/4919600/…
        • 谢谢。有什么方法可以测试 PROJECT_ROOT 变量返回什么?
        • 我可以用 python shell 做到这一点。谢谢。
        猜你喜欢
        • 2013-12-19
        • 2014-09-11
        • 2018-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-24
        • 2012-01-02
        • 1970-01-01
        相关资源
        最近更新 更多