Django - 模板不存在

3

我正在创建一个名为 "crepes_bretonnes" 的项目。在这个项目中,我有一个应用程序博客。我创建了一个名为 date.html 的模板。以下是我的文件夹结构 :

crepes_bretonnes/
    blog/
        __init__.py
        admin.py
        migrations/
            __init__.py
        models.py
        templates/
            blog/
                addition.html
                date.html
        tests.py
        views.py
    crepes_bretonnes/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    templates/
    db.sqlite3
    manage.py

当我尝试查看页面时,出现了消息模板DoesNotExist。我在网上看了很多相关的内容,但没有成功解决我的问题。实际上,我不明白为什么Django没有在我的应用程序博客的模板文件夹中搜索,即使我已经在setting.py中写入了“blog”在INSTALLED_APP中。显然,我已经在setting.py中添加了TEMPLATE_DIRS = (os.path.join(BASE_DIR,'templates'),)。我也尝试过更改字典TEMPLATES。然而,如果我理解得正确,这与这里的Django应该能够在没有这个的情况下找到我的模板没有关联。
我没有任何解决方案。
谢谢你的帮助。
PS:如果我将date.html放在通用模板文件夹中并排列一些行,它会起作用。然而,这不是一个解决方案,我想要遵守良好的结构。
更新:
感谢您的答复。是的,我的设置确实说了INSTALLED_APPS,并且APP_DIRS已经为True。
以下是我在setting.py中的TEMPLATES:
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',
            ],
        },
    },
]

更新: 调试信息显示 Django 在 django.template.loaders.app_directories.Loader 中搜索:/Users/benjamin/anaconda/lib/python2.7/site-packages/django/contrib/admin/templates/blog/date.html。然而,我并没有在这些文件夹中写任何东西... 我是在 "文档" 文件夹中工作。为什么 Django 在那里搜索而不是在 "文档" 中搜索呢?


显然这不是完全相同的问题。 - KB303
6个回答

2

我通过在“templates”后面添加正斜杠“/”来解决了这个问题:

'DIRS': [BASE_DIR / 'templates/'],

1

我曾经遇到同样的问题,提示模板不存在,我通过在views.py中更改URL模式来解决这个问题。之前我只提到了date.html,后来我编辑为blog/date.html。希望能对你有所帮助。


1

我有同样的问题,将应用程序添加到INSTALLED_APPS中,问题解决了,因为你(和我)使用的模板不在主应用程序中,所以必须在设置中注册(就像从主urls文件引用应用程序的URL一样)。


1
我认为'INSTALLED_APP'是一个错别字,实际上在你的设置中应该是'INSTALLED_APPS'。无论如何,你需要设置APP_DIRS = True,以便在app/templates文件夹中找到模板:
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
                 os.path.join(BASE_DIR, 'templates'),
                 ],
        'APP_DIRS': True,  # this line is important
        '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'
                # ...
            ]
        },
    },
]

谢谢你的回答。是的,我的设置中确实写着“INSTALLED_APPS”,而且“APP_DIRS”已经是True了。这是我在setting.py文件中的“TEMPLATES”部分: - KB303

0
对我来说,问题出在使用rest_framework时没有将其添加到INSTALLED_APPS中。

0

前往您的setting.py文件并尝试以下内容:

os.path.join(BASE_DIR, "templates")

例如:
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',
        ],
    },
},

]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接