如何在Django自定义403.html页面中显示“permission_denied_message”

cvxl0en2  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(85)

如何在Django中正确显示自定义的异常消息403错误?
在我的注册视图中,我正在使用:

class SignUpView(LoginRequiredMixin, PermissionRequiredMixin, CreateView):
    login_url = 'error_403'
    # ....
    # ...
    permission_denied_message = 'You are not allowed this transaction!! Ha Ha!!'
#    raise PermissionDenied() # ('permission_denied_message')
    raise_exception = True

字符串
现在如何显示消息(“permission_denied_message“?)在我的自定义 403.html 中?
这是我的函数来呈现错误页:

def error_403(request, exception):
    data = {}
    add_user = 'add_user'
    data = {'perm': add_user}
    return render(request, '403.html', data)


我已经经历了很多关于这个主题的事情(包括那些关于SO的),但是不能成功地显示错误消息(除了我在“403.html”中放置的静态消息)。我在模板中使用了{{ exception}},但没有显示任何内容(除了我已经拥有的静态消息)。

1.如何在自定义403页面中显示permission_denied_message
2.目前,我正在手动更新函数error_403中的dict data{}中的一些原始数据,这些数据在403错误页面上呈现。dict的正确用法是什么?

x7yiwoj4

x7yiwoj41#

你可以使用django消息框架来实现这一点。这允许您添加要发送到模板的自定义消息。你需要从django.contrib导入它。下面是向模板发送错误消息的代码。

from django.contrib import messages
# In your function you do this

def error_403(request, exception):
    error_message = messages.add_message(request, messages.ERROR, "permission denied")
    errors = {'errors': error_message}
    return render(request, '403.html', errors)

字符串
在您的模板中,您可以检查是否有错误消息,然后显示它们

<h1> {{errors}} </h1>

ffdz8vbo

ffdz8vbo2#

我和你有同样的问题,我一直找不到任何简单明了的方法。
我深入研究了官方的Django文档和Django代码。
答案很简单:
1/尽可能简单地定义视图,只添加mixin:

class SignUpView(LoginRequiredMixin, PermissionRequiredMixin, CreateView):
    permission_required = 'can_xxx'
    permission_denied_message = 'You are not allowed this transaction!! Ha Ha!!'

字符串
2/在应用模板文件夹中创建文件my_app/template/403.html,如下所示:

<!DOCTYPE html>
<html>
<head>
    <title>Permission Denied</title>
</head>
<body>
    <h1>403 - Permission Denied</h1>
    <p>{{ exception }}</p>
</body>
</html>


一切都神奇地运转起来!

相关问题