Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django忽略404.html_Python_Html_Django - Fatal编程技术网

Python Django忽略404.html

Python Django忽略404.html,python,html,django,Python,Html,Django,我为Django应用程序编写了一个自定义的404.html,并将其放在模板目录中与index.html相同的位置,但Django仍然显示默认的404页面。Debug设置为false,allowed hosts设置为127.0.0.1以进行测试,稍后将对其进行更改。这怎么可能呢?我想创建一个404.html就足够了?我是否需要在某些设置中激活错误页面 以下是我的应用程序结构: myapp |-- manage.py |-- myapp | |-- models.py | |-- setti

我为Django应用程序编写了一个自定义的404.html,并将其放在模板目录中与index.html相同的位置,但Django仍然显示默认的404页面。Debug设置为false,allowed hosts设置为127.0.0.1以进行测试,稍后将对其进行更改。这怎么可能呢?我想创建一个404.html就足够了?我是否需要在某些设置中激活错误页面

以下是我的应用程序结构:

myapp
|-- manage.py
|-- myapp
|   |-- models.py
|   |-- settings.py
|   |-- templates
|   |   |-- index.html
|   |   |-- 404.html

您需要覆盖404错误的默认视图处理程序。 Django文档为您的问题提供了答案:

404.html应直接放置在目录模板中

例如,类似这样的事情:

yourproject
|-- manage.py
|-- yourproject
|   |-- __init__.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
|-- yourapp
|   |-- __init__.py
|   |-- models.py
|   `-- views.py
|-- static
|-- templates
|   |-- 404.html
|   |-- yourapp
`   `-- anotherapp

您不应该将其与index.html等应用程序的模板放在一起。

我最终通过配置模板目录解决了这个问题:

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

你把404.html放在哪里了?请显示目录结构。您的结构不是最优的。settings.py和models.py不应在一起。目录模板应该位于项目的顶层。你真的尝试过我在回答中提出的结构吗?当你调用一个不存在的URL时,你会得到什么?如果您使用python manage.py runserver运行应用程序,您会在控制台输出中看到什么?是否有http状态代码404?出于测试目的,设置允许的\u HOSTS=['*']。在生产中你会改变它。然后重试。将带有404.html的模板目录放在顶层并更改允许的主机不会改变任何内容。是的,HTTP 404被提升,但它显示了默认的404模板。控制台输出为[22/Oct/2014 15:08:19]GET/blabla/HTTP/1.1 404 2687I也尝试过这种结构,但没有效果。有些东西还没找到。我需要覆盖一些设置吗?我这样问是因为暗示这一点的答案被否决了。