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

Django视图重定向外部域名失败,为何路径被追加至当前域名?

Django重定向外部域名失败的问题排查与解决

嗨,我来帮你搞定这个问题!你遇到的情况其实是Django对相对URL和绝对URL的处理逻辑导致的——当你只写google.com时,Django会把它当成当前域名下的相对路径,自然就会拼接到www.mydomain.com后面,变成www.mydomain.com/google.com,这肯定会404啦。

解决方法很简单:给URL加上完整的协议头(http/https)

不管用HttpResponseRedirect还是redirect(),只要把目标地址改成带https://的完整绝对URL就行:

用HttpResponseRedirect的修正代码:

class MyView(TemplateView):
    def get(self, request, *args, **kwargs):
        return HttpResponseRedirect('https://google.com')

用redirect()的修正代码(更推荐,Django的快捷函数更灵活):

from django.shortcuts import redirect

class MyView(TemplateView):
    def get(self, request, *args, **kwargs):
        return redirect('https://google.com')

为什么会这样?

Django的重定向函数默认会把不带协议头的字符串解析为相对路径,也就是基于当前请求的域名来拼接。只有当字符串包含http://或https://时,它才会识别为外部绝对URL,直接跳转到目标网站。

另外,如果你需要动态处理外部域名,也可以把完整URL存在配置里,比如在settings.py里加:

EXTERNAL_REDIRECT_URL = 'https://google.com'

然后在视图里引用:

from django.conf import settings

class MyView(TemplateView):
    def get(self, request, *args, **kwargs):
        return redirect(settings.EXTERNAL_REDIRECT_URL)

这样后续要修改目标地址时,直接改配置文件就行,不用动视图代码~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:00:43