未找到Django 1.10 404.html模板

时间:2016-10-29 10:21:28

标签: python django

据我在Django文档中看到,要显示自定义404页面,您只需将一个404.html放在根模板目录中。

所以我的项目结构是:

django_project
|_ config
| |_ settings.py
| |_ urls.py
|
|_ templates
  |_ base.html
  |_ index.html
  |_ 404.html

在settings.py中,我对模板进行了以下设置:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ["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',
                'contact.views.contact_info',
            ],
        },
    },
]

对于'DIRS'参数我也使用了os.path.join(BASE_DIR, "templates")。这有完全相同的结果。

我也用过

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

这会导致弃用警告。

在urls.py中我也没有做任何特别的事情:

from django.conf.urls import url, include
from django.contrib import admin
from django.views.generic import TemplateView

urlpatterns = [
    url(r'^$', TemplateView.as_view(template_name="index.html"), name="index"),

    url(r'^admin/', admin.site.urls),
]

模板继承在其他应用程序中运行良好,因此找到了模板目录。

在设置中:DEBUG=False

当我输入错误的网址时,我得到了Django默认的'NOT FOUND'页面。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

你需要覆盖'handler404'变量,将其添加到urls.py

from django.conf.urls import handler404

handler404 = 'your_app.views.404'

https://docs.djangoproject.com/en/1.10/topics/http/views/#customizing-error-views

答案 1 :(得分:0)

我猜你必须为你的404.html模板指定路线,或者使用django快捷键' get_object_or_404'处理错误404。