Django 404页面未加载

时间:2017-03-25 10:29:37

标签: django django-forms django-templates django-views

我使用django 1.10创建了一个简单的django应用程序来创建我的自定义404页面。 我在我的页面中创建了404.html和500.html,根据Django Documentation.Then我尝试了两种方法来呈现404错误消息。

1)我制作了简单的404.html和500.html页面,然后没有做任何事情。 我成功获得了500页。 正确的页面URL是:localhost:8000 / book 我提供了localhost:8000 / book / fgfg 并且根据输入没有条目。但它是按照我的预期将我发送到500页而不是404页面。 这是Internal App的Urls.py:

from django.conf.urls import url
from django.conf.urls import (
handler400, handler403, handler404, handler500
 )
from bookform import views
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),]

这是外部项目的urls.py:

 from django.conf.urls import url,include,handler404,handler500
 from django.contrib import admin


 urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^book/', include('bookform.urls')),
]
# handler404='bookform.views.handler404'
# handler500='bookform.views.handler500'

我在这里评论了handler404和500,我在第二种方法中取消注释。 在第一种方法中,除了添加404和500个html文件之外我什么也没做,Django试图找出url并导致500错误,但我原以为它是404错误。 将Debug设置为true时显示此错误:     使用formdj.urls中定义的URLconf,Django按以下顺序尝试了这些URL模式:     ^管理员/     ^ book / ^ $ [name =' index']     当前的URL book / dfsdfsd并不匹配其中任何一个。

如果我设置DEBUG = FALSE导致500错误。

2)现在在方法2中: 我更新了views.py文件,并从urls.py中取消注释了handler404和handler505行。

这是views.py:

  from django.shortcuts import render,render_to_response
  from django.shortcuts import HttpResponse
  from django.forms import modelformset_factory
  from forms import BookForm
  from bookform.models import Book
  from django.template import RequestContext
  def index(request):

     BookFormSet=modelformset_factory(Book,fields= ('name','authors'),extra=10,can_delete=True)
    formset=BookFormSet()
    return render(request,'bookform/index.html',{'formset':formset})

  def handler404(request):
    response = render(request,'bookform/404.html', {'status':400},
                            )
    response.status_code = 404
    print('I am getting called')
    return response
 def handler500(request):
    response = render(request,'bookform/500.html', {'status':400},
                              )
    print('I am getting called 500')
    response.status_code = 500
    return response

我再次获得500页。我试图删除500和Debug = False然后它导致500.然后我打开调试,它说错误是404错误。 所以无论我做了什么,我都有一个叫做500.html的页面。 现在我很困惑如何正确加载404.html页面。

2 个答案:

答案 0 :(得分:2)

在项目文件夹的 urls.py 中,将帐户(可以是任何应用)添加到同一项目的应用中:

<强>项目/ urls.py

public void HttpPOSTRequestWithParameters() {
        RequestQueue queue = Volley.newRequestQueue(this);
        String url = "http://www.spgautopark.com.my/spgservices/parking_registration.asmx?op=Signup";
        StringRequest postRequest = new StringRequest(Request.Method.POST, url, 
            new Response.Listener<String>() 
            {
                @Override
                public void onResponse(String response) {
                    Log.d("Response", response);
                }
            }, 
            new Response.ErrorListener() 
            {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("ERROR","error => "+error.toString());
                }
            }
                ) {     
            // this is the relevant method
            @Override
            protected Map<String, String> getParams() 
            {  
                Map<String, String>  params = new HashMap<String, String>();
                params.put("grant_type", "password"); 
                // volley will escape this for you 
                params.put("keys", "values");
                params.put("put keys", "values");  
                params.put("keys", "valuers");

                return params;
            }
        };
        queue.add(postRequest);
    }

在帐户的视图中添加以下内容:

帐户/ views.py

handler404 = 'accounts.views.page_not_found'

不要忘记进行必要的导入,也最好在urls模式上添加handler404内容。在测试分段时,也不要忘记在 settings.py 中更改调试=错误

答案 1 :(得分:1)

尝试这样的观点:

from django.views.generic.base import TemplateView

class Error404View(TemplateView):
    template_name = '404.html'

    def get(self, request, *args, **kwargs):
        response = super(Error404View, self).get(request, *args, **kwargs)
        response.status_code = 404
        return response

    @classmethod
    def as_error_view(cls):
        v = cls.as_view()
        def view(request):
            r = v(request)
            r.render()
            return r
        return view

urls.py

handler404 = Error404View.as_error_view()