我使用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页面。
答案 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()