Django 1.11 404 Page,Debug = True

时间:2017-05-28 14:28:03

标签: python django django-templates django-views

没有让事情变得困难,我只想展示一个带有静态文件的特殊404渲染。

如果设置DEBUG = False,则可以使用 urls.py

handler404 = 'app.views.handler404'

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

网址

中的DEBUG = True
url(r'^404/$', views.handler400)

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

实现渲染的简单方法是什么?当 DEBUG = True 时,使用staticfiles键入 localhost / asdfhjfsda

提前致谢...

3 个答案:

答案 0 :(得分:6)

Django 1.9发布后的最简单方法是在urls.py

from django.views.defaults import page_not_found

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

它想要一个例外,给它一个例外:)

答案 1 :(得分:2)

我有一个完整的解决方案

我的开发环境: 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项目根文件夹)
  3. 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
    2.     import 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
      2.     from django.conf.urls import handler404, handler500
            from . import views
        
            urlpatterns = [..]
        
            handler404 = views.error_404
            handler500 = views.error_404
        
        1. mysite的\ mysite的\ views.py
        2.     from django.shortcuts import render
          
              def error_404(request):
                  return render(request, 'error404/error_404.html')
          
          1. " error_404.html"中的一些Jinjo逻辑(伪代码)
          2.     {% load staticfiles %}
                ...
                  link type="text/css" href="{% static 'error404/files/style.css' %}"
                ...
                  img src="{% static 'error404/files/image.jpg' %}"
                ...
            

答案 2 :(得分:0)

在django 1.10 docs中:

  

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

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