【问题标题】:Can't get TEMPLATE_DIR correct working path无法获得 TEMPLATE_DIR 正确的工作路径
【发布时间】:2015-12-16 21:49:48
【问题描述】:

晚上好,

我已经从 Stack Overflow 和几个教程中阅读了多个答案,但它仍然不起作用。

该项目名为“crepes_bretonnes”。 项目的绝对路径是: /Users/Jack/Desktop/Projet_Django/crepes_bretonnes

此路径指向项目的根目录,其中包含:

  • 博客
  • crepes_bretonnes
  • db.sqlite3
  • manage.py
  • 静态
  • 模板

settings.py 在第二个文件夹中:crepes_bretonnes 并包含:

import os

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

SETTINGS_DIR = os.path.dirname(__file__)
PROJECT_PATH = os.path.join(SETTINGS_DIR, os.pardir)
PROJECT_PATH = os.path.abspath(PROJECT_PATH)

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(PROJECT_PATH, 'templates'),
)

如果我做的正确:Setting_Dir 是Settings.py 的路径并返回根路径(上一级)我使用函数pardir

现在,Django 将在 crepes_bretonnes 项目根目录下的模板文件夹中搜索模板,路径如下: /Users/Jack/Desktop/Projet_Django/crepes_bretonnes

blog 应用程序的views.py 中的函数返回包含模板的“渲染”:

return render(request, 'blog/addition.html', locals())

此模板位于博客文件夹中的模板文件夹中。

addition.html 的第一行是:

{% extends "base.html" %}

此 base.html 包含在称为模板的根文件夹中。我不明白为什么它让我给出以下错误:

Django 尝试按以下顺序加载这些模板:Using loader django.template.loaders.filesystem.Loader:使用加载器 django.template.loaders.app_directories.Loader: /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Django-1.8.3-py3.4.egg/django/contrib/admin/templates/base.html (文件不存在) /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Django-1.8.3-py3.4.egg/django/contrib/auth/templates/base.html (文件不存在) /Users/Jack/Desktop/Projet_Django/crepes_bretonnes/blog/templates/base.html (文件不存在)

实际上在我的项目根目录下的模板文件夹中找不到base.html。关于绝对路径,我必须在某些时候遗漏一些关键的东西。

你能帮忙吗?

编辑:我使用的是 Mac os X。 以下是 settings.py 中请求的所有打印路径:

**Base_Dir** /Users/Jack/Desktop/Projet_Django/crepes_bretonnes

**Settings_Dir** /Users/Jack/Desktop/Projet_Django/crepes_bretonnes/crepes_bretonnes

**Project_Path** /Users/Jack/Desktop/Projet_Django/crepes_bretonnes

**Templates_Dir** /Users/Jack/Desktop/Projet_Django/crepes_bretonnes/templates

编辑:答案

修改settings.py使其看起来像这样:

import os

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

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        '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',
            ],
        },
    },
]

【问题讨论】:

  • 您使用的是 Windows 吗? os.path.join(PROJECT_PATH, 'templates') 的结果是什么?

标签: python django templates django-templates


【解决方案1】:

根据官方 Django 文档,从 Django 1.8 开始不推荐使用 TEMPLATE_DIRS 设置,他们建议改用 DIRS 设置。

此外,如果您的应用中有模板文件,请确保将 APP_DIRS 设置为 True,因为它默认为 False。

来源:https://docs.djangoproject.com/en/1.8/ref/settings/#template-dirs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2016-03-20
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多