Django如何按用户组正确跳转页面?解决重定向过多问题
解决被封禁用户点击Post按钮后重定向循环的问题
你的浏览器提示重定向次数过多,核心问题出在banned_alert视图函数里——它直接重定向到自身对应的URL,每次访问都会触发新的重定向,形成无限循环。下面是正确的实现方案:
1. 修复视图函数
banned_alert的作用是展示封禁提示页面,不需要重定向,直接渲染对应的模板即可:
# views.py def banned_alert(request): return render(request, 'main/banned_alert.html')
注意确保模板文件banned_alert.html放在main应用的templates/main目录下,和Django的模板查找规则匹配。
2. 优化URL写法(推荐)
避免在模板中硬编码URL,改用Django的{% url %}标签,后续修改URL配置时无需手动更新模板:
<!-- base.html --> {% load get_group %} {% if request.user|has_group:"mod" or request.user|has_group:"default" or user.is_staff %} <a class="nav-link" href="{% url 'create_post' %}">Post</a> {% else %} <a class="nav-link" href="{% url 'banned_alert' %}">Post</a> {% endif %}
3. 增强安全性(可选)
为了防止被封禁用户直接手动访问/create-post路径,建议在create_post视图中添加权限校验:
# views.py def create_post(request): # 校验用户权限,无权限则跳转封禁提示页 if not (request.user|has_group:"mod" or request.user|has_group:"default" or request.user.is_staff): return redirect('banned_alert') # 原有的创建帖子逻辑 # ...
完成以上修改后,被封禁用户点击Post按钮会正常打开封禁提示页面,不会再出现重定向循环问题。
内容的提问来源于stack exchange,提问作者ShawnWang
相关产品推荐
相关产品推荐

