Django 1.11在Debug=True时出现404页面问题

7

我不想把事情搞得太复杂,只是想展示一个带有静态文件的特殊404渲染。

如果你将DEBUG = False设置为假,那么你可以在urls.py中使用它。

handler404 = 'app.views.handler404'

但是它没有静态文件。我不想为一个简单的应用程序安装Web服务器。

urls中使用DEBUG = True

url(r'^404/$', views.handler400)

没有覆盖默认的页面未找到(404)页面。

DEBUG=True时,使用静态文件实现如何渲染,例如在输入localhost/asdfhjfsda时如何实现?

提前感谢...

3个回答

8

在Django 1.9之后,最简单的做法是在urls.py中进行:

from django.views.defaults import page_not_found

url(r'^404/$', page_not_found, {'exception': Exception()})

它需要一个异常,给它一个异常 :)

1
在Django 1.10中,docs中提到:

Django 1.9中的更改: page_not_found()的签名已更改。该函数现在接受第二个参数,即触发错误的异常。有关异常的有用表示也传递给模板上下文。

请查看您的'app.views.handler404'定义,它可能缺少一个参数,也许这就是为什么'r'^404/$'处理程序没有为您提供正确方法调用的原因。

1

我有一个完整的解决方案

我的开发环境: Windows 7,Python 3.5.2,Django 1.11,WAMP 3.0.6(Apache 2.4.23,mod_wsgi)

  1. 假设您有带有静态文件的error_404.html模板
  2. 创建下一个目录结构(“mysite” - Django项目根文件夹)
mysite\
        mysite\
                settings.py
                urls.py
                views.py
        static\
                error404\
                          files\
                                 style.css 
                                 image.jpg
        templates\
                   error404\
                             error_404.html
  1. mysite\mysite\settings.py
    import os
DEBUG = False TEMPLATES = [{ .. 'DIRS': [os.path.join(BASE_DIR, 'templates')], .. }]
STATIC_URL = '/static/' STATIC_ROOT = 'FullPathToYourSite.com/mysite/static/'
    导入 os
DEBUG = False TEMPLATES = [{ .. 'DIRS': [os.path.join(BASE_DIR, 'templates')], .. }]
STATIC_URL = '/static/' STATIC_ROOT = 'FullPathToYourSite.com/mysite/static/'
  1. mysite\mysite\urls.py
从django.conf.urls导入handler404,handler500 从.导入views urlpatterns = [..]
handler404 = views.error_404 handler500 = views.error_404
  1. mysite\mysite\views.py
    from django.shortcuts import render

    def error_404(request):
        return render(request, 'error404/error_404.html')
  1. "error_404.html"中的一些Jinjo逻辑(伪代码)
    {% load staticfiles %}
    ...
      link type="text/css" href="{% static 'error404/files/style.css' %}"
    ...
      img src="{% static 'error404/files/image.jpg' %}"
    ...

2
我认为OP是在寻求一个带有DEBUG = True的解决方案。 - nirinsanity

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