美文网首页python之路
django(十一)自定义404、403页面

django(十一)自定义404、403页面

作者: 非鱼2018 | 来源:发表于2021-03-16 20:44 被阅读0次

1.直接覆盖内置视图

setting文件配置

DEBUG = False

ALLOWED_HOSTS = [*]

TEMPLATES = [

    {

        ...

        'DIRS': [os.path.join(BASE_DIR,'templates')],

        ...

}

templates/404.html

内容:

{{ request_path }}

404 NOT FOUND!!!

默认会调用内置视图

django.views.defaults.page_not_found(),

defaults.server_error(request, template_name='500.html')

defaults.bad_request(request, exception, template_name='400.html')

defaults.permission_denied(request, exception, template_name='403.html')

效果

image.png

2.重写

如把404.html模板写在templates/myapp下

父路由的url文件

from myapp import views

handler404 = views.page_not_found

handler404将会覆盖默认视图

myapp/404.html:


<body>

{{error}}

{{request_path}}

</body>

视图函数:

def page_not_found(request,exception):

    return render(request, 'myapp/404.html',context={'error':'访问有误:页面不存在',"request_path":request.path}, status=404)

只要返回HttpResponseNotFound都可以

def not_found(request,exception):

    from django.http import HttpResponseNotFound

    return HttpResponseNotFound('<h1>Page not found</h1>')

3.自定义403页面

templates/403.html

from django.core.exceptions import PermissionDenied

def new_topic(request):

    if not request.user.is_authenticated:

        raise PermissionDenied

如果用户调用new_topic,将会出现自定义403页面

或者使用handler403自定义视图也可以

相关文章

网友评论

    本文标题:django(十一)自定义404、403页面

    本文链接:https://www.haomeiwen.com/subject/xfzhxltx.html