You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django视图重定向至同一页面触发ERR_TOO_MANY_REDIRECTS错误求助

解决Django视图中重定向导致的ERR_TOO_MANY_REDIRECTS问题

你遇到的这个循环重定向问题其实很好理解——每次当条件不满足时,你把用户重定向到当前视图的URL,而这个请求又会再次触发视图的get方法,条件依然不满足的话就又重定向,无限循环下去,浏览器就会抛出ERR_TOO_MANY_REDIRECTS错误。

而你尝试的return HttpResponseRedirect('')之所以显示空白,是因为空字符串不是有效的跳转目标,视图没有返回任何渲染的页面内容,浏览器自然显示空白。

下面给你几个可行的解决方案:

方案1:在当前请求中处理(推荐)

不要用重定向,而是直接渲染页面,同时把条件不满足的状态传递给模板,在模板里显示提示信息。这样既不会触发循环,用户也能看到反馈。

修改你的视图代码:

from django.views.generic import DetailView

class Test(DetailView):
    # 确保指定你的模板路径和模型
    template_name = "your_app/test_detail.html"
    model = YourTargetModel

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 这里替换成你的实际条件判断
        if not self.object.some_field or not self.request.user.is_authenticated:
            context["condition_failed"] = True
        return context

然后在对应的模板test_detail.html中添加提示:

{% if condition_failed %}
    <div class="alert alert-warning">
        条件不满足,请检查相关内容后再尝试!
    </div>
{% endif %}

<!-- 原本的页面内容继续保留 -->
{{ object.title }}
<!-- ...其他内容 -->

方案2:重定向到其他页面

如果条件不满足时不应该停留在当前页面,那就重定向到其他有效的URL,比如列表页、首页或者错误提示页:

from django.http import HttpResponseRedirect
from django.urls import reverse

class Test(DetailView):
    def get(self, request, *args, **kwargs):
        # 先获取对象,因为DetailView需要它
        self.object = self.get_object()
        # 你的条件判断
        if not self.object.is_active:
            # 重定向到列表页,替换成你自己的URL名称
            return HttpResponseRedirect(reverse("test_list"))
        # 条件满足时,执行默认的get逻辑
        return super().get(request, *args, **kwargs)

关键提醒

永远不要在视图中重定向到自身URL来处理“停留在当前页面”的需求——这必然会导致循环重定向。正确的做法是在同一个请求周期内完成状态传递和页面渲染,或者跳转到其他独立的URL。

内容的提问来源于stack exchange,提问作者user12151542

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:51:11