【问题标题】:Django not searching templates directory defined in APP_DIRS setingsDjango 不搜索 APP_DIRS 设置中定义的模板目录
【发布时间】:2017-05-28 04:28:47
【问题描述】:

我有一个与我的项目目录同级的模板目录,所以我放入了 settings.py

'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,

但 Django 不在 DIRS 处停止的应用程序中搜索模板

安装所有需要的应用程序

【问题讨论】:

    标签: python django django-templates django-settings


    【解决方案1】:

    我今天得到了这个(我在 django 2.1 上)。解决方案是将“myappname”添加到设置中的 INSTALLED_APPS 中(以前在旧 django 版本上必须这样做,但我认为不再是强制性的)。如果不这样做,django 模板处理器就不会查找 myappname/templates/myappname/

    我也像其他一些答案一样设置了 TEMPLATES_DIRS,但无论出于何种原因,这在我当前的设置中是不够的(我打破了我的笔记本电脑,所以我在 windows 上使用全新的 python 3.7 和全新的 django 2.1(大约一周前我上次使用 django 工作时不必执行此步骤...)

    【讨论】:

      【解决方案2】:

      我的解决方案是将应用名称放在 INSTALLED_APPS 的末尾

      INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          'posts'  # <= put your app name here i guess?
      ]
      

      【讨论】:

        【解决方案3】:

        检查您的DIRS 设置。它应该包括模板目录本身。

        TEMPLATES = [
            {
                'BACKEND': 'django.template.backends.django.DjangoTemplates',
                'DIRS': [os.path.join(BASE_DIR, 'templates')],
        
                # True or False, depends on your case.
                'APP_DIRS': True,
        
                # Default django setup.
                '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',
                    ],
                },
            },
        ]
        

        【讨论】:

        • 仔细检查您的代码。该解决方案运行良好。
        • 我正在更新我的问题,它是 app_dirs,这是真的,没有被遍历。
        • Django 打印一个已检查文件夹的列表。看看错误页面,应该有一个Template-loader postmortem部分。这应该会有所帮助。
        【解决方案4】:

        只需将模板目录的名称放在 settings.py 中“DIRS”部分的 TEMPLATES 数组下即可

        TEMPLATES = [
            {
                'BACKEND': 'django.template.backends.django.DjangoTemplates',
                'DIRS': ['your folder name'],
                'APP_DIRS': True,
                'OPTIONS': {
                    'context_processors': [
                        'logyt_transporte.context_processors.module_variables',
                        'django.template.context_processors.debug',
                        'django.template.context_processors.request',
                        'django.contrib.auth.context_processors.auth',
                        'django.contrib.messages.context_processors.messages',
                    ],
                },
            },
        ]
        

        【讨论】:

        • 为什么不呢? DIRS 是一个数组,您可以在其中放置更多目录名称。我想没有别的办法了,我前段时间搜索过这个答案。
        • 我正在更新我的问题,它是 app_dirs,这是真的,没有被遍历。
        • 不仅不可扩展,还可以硬编码。
        • 您始终可以使用 os.path.join ,如上述答案中所述,但使事情正常进行的方法是一样的。在 DIRS 数组中写入所需的文件夹。 @user7410898 您的模板文件夹是否遵循默认符号?模块名/模板/模块名/file.html???
        【解决方案5】:

        我试图覆盖来自第三方包的模板。

        我的问题是INSTALLED_APPS 按以下顺序排列:

        INSTALLED_APPS = [
            # core
            # third-party
            # mine
        ]
        

        因为我清楚地掩盖了告诉您这不是它的工作原理的文档:https://docs.djangoproject.com/en/3.1/ref/settings/#installed-apps

        特别是最后一行:

        当多个应用程序提供相同版本的不同版本时 资源(模板、静态文件、管理命令、翻译)、 INSTALLED_APPS 中列出的第一个应用程序具有优先权。

        将其视为后备顺序,并确保覆盖原件之前,等等。叹息。

        【讨论】:

          猜你喜欢
          • 2021-04-06
          • 2020-07-27
          • 2018-03-31
          • 2017-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-01
          相关资源
          最近更新 更多