Django用户登录验证及表单10个创建上限的错误页面不显示问题
Django表单创建上限后无法显示错误页面的修复方案
问题根源
你当前代码里定义了两个同名的create_form视图函数,第二个函数会直接覆盖第一个,导致用户认证检查的逻辑根本不会执行;同时原代码未将错误提示信息传递给错误模板,自然看不到预期的提示内容。
修复后的完整视图代码
把两段逻辑合并,同时添加错误提示的传递(这里用Django自带的messages框架,也可以直接通过上下文变量传递):
from django.shortcuts import render, redirect, reverse from django.contrib import messages from .models import Form def create_form(request): # 先做用户认证校验 if not request.user.is_authenticated: return redirect(reverse("login")) logged_in_user = request.user max_forms_per_creator = 10 form_count = Form.objects.filter(creator=logged_in_user).count() if form_count >= max_forms_per_creator: # 传递错误提示信息 messages.error(request, "你最多只能创建10个表单,无法继续创建") return render(request, "error/error.html") # 下方放置正常创建表单的逻辑(比如处理POST请求、渲染表单页面) return render(request, "forms/create_form.html")
错误模板显示提示
在error/error.html模板中加入提示渲染逻辑:
{% if messages %} {% for message in messages %} <div class="alert alert-danger">{{ message }}</div> {% endfor %} {% endif %} <!-- 若不用messages框架,也可以直接通过上下文传递 --> <!-- 视图里改成:return render(request, "error/error.html", {"error_msg": "你最多只能创建10个表单"}) --> <!-- 模板里对应写:<div class="error">{{ error_msg }}</div> -->
额外注意事项
- 确保项目已启用
messages框架(Django默认配置已包含,只需确认django.contrib.messages在INSTALLED_APPS中,且中间件列表里有django.contrib.messages.middleware.MessageMiddleware) - 检查错误模板的路径是否正确,确保
error/error.html存在于你的模板目录下
内容的提问来源于stack exchange,提问作者lion
相关产品推荐
相关产品推荐

