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

如何阻止自定义Django Admin URL重定向至修改视图?

Django Admin自定义URL跳转异常问题解决

问题根源:URL匹配顺序优先级错误

Django Admin默认的URL列表中包含了<path:object_id>/change/这类通用匹配规则,如果你把自定义URL追加到super().get_urls()返回的列表后面,Django会优先匹配默认的变更视图URL,导致你的自定义链接被错误解析成修改视图。

解决方法

1. 调整URL顺序,把自定义URL放在最前面

修改get_urls方法,先定义自定义URL,再合并默认URL,确保Django优先匹配你的自定义路径:

def get_urls(self):
    # 先定义自定义URL
    custom_urls = [
        path(
            'get_monthly_report/',
            self.admin_site.admin_view(self.get_monthly_report),
            name='get_monthly_report'
        ),
    ]
    # 再合并默认Admin URL
    return custom_urls + super().get_urls()

2. 检查自定义视图的返回逻辑

确保你的get_monthly_report视图函数没有意外触发重定向,比如返回了正确的HttpResponse或模板响应:

from django.http import HttpResponse
from django.shortcuts import render

def get_monthly_report(self, request):
    if request.method == 'POST':
        # 处理表单提交逻辑
        return HttpResponse("月度报告已生成")
    # GET请求时渲染页面或表单
    return render(request, 'admin/your_app/your_model/monthly_report.html')

3. 验证模板中的URL调用

可以显式指定应用和模型的命名空间,避免URL名称冲突:

<!-- 格式为 admin:<app_label>_<model_name>_<url_name> -->
<a href="{% url 'admin:your_app_your_model_get_monthly_report' %}">获取月度报告</a>

你也可以在Python代码中用reverse测试URL是否正确生成:

from django.urls import reverse

# 在shell中测试
reverse('admin:your_app_your_model_get_monthly_report')

额外排查项

  • 检查是否有自定义中间件修改了请求路径或重定向规则
  • 清除浏览器缓存,避免旧的重定向缓存干扰测试
  • 使用django-debug-toolbar查看请求匹配的URL规则,确认自定义URL是否被正确命中

内容的提问来源于stack exchange,提问作者Eric O.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:35:09