据我在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'页面。
我在这里缺少什么?
答案 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。