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

Django自定义Admin视图点击按钮后消息不显示问题求助

修复Django Admin自定义视图消息不显示的问题

1. 修正自定义视图的响应逻辑

自定义视图my_view必须返回重定向到模型修改页面的响应——Django消息框架依赖会话存储消息,只有重定向到下一个请求,消息才会被保留并渲染。修改MyAdminSite中的my_view方法:

from django.shortcuts import redirect
from django.contrib.admin.utils import quote

def my_view(self, request, pk):
    # 执行你的业务逻辑
    messages.info(request, 'some message')
    # 重定向回模型的修改页面
    return redirect(
        f'{self.name}:appname_modelname_change',
        quote(pk)
    )

注:appname_modelname_change是Django Admin自动生成的修改页URL名称,格式为[admin_site_name]:[app_label]_[model_name]_change,需替换为你实际的应用、模型名称。

2. 统一URL名称与模板引用

你的URL定义中name为appname_modelname_view,但模板里用的是opts|admin_urlname:'myview',两者不匹配会导致URL解析错误,二选一修改即可:

方案一:修改URL的name参数

将URL名称改为myview,匹配模板中的引用:

def get_urls(self):
    from django.urls import path
    urls = super().get_urls()
    urls += [
        path('appname/modelname/<int:pk>', self.admin_view(self.my_view), name='myview'),
    ]
    return urls

方案二:修改模板中的URL引用

直接使用自定义URL的名称,指定你的AdminSite实例名(此处为my_admin):

<a href="{% url 'my_admin:appname_modelname_view' original.pk %}" class="someclass">Invoke</a>

3. 移除模板中重复的消息渲染(可选)

原生admin/change_form.html已经包含消息渲染逻辑,你手动添加的<ul class="messages">会导致重复显示,建议删除这段代码,直接继承原模板的消息展示:

{% extends "admin/change_form.html" %}
{% load i18n admin_urls %}

{% block object-tools-items %}
    <li>
        <a href="{% url opts|admin_urlname:'myview' original.pk %}" class="someclass">Invoke</a>
    </li>
    <li>
        <a href="{% url opts|admin_urlname:'history' original.pk|admin_urlquote %}" class="historylink">{% translate "History" %}</a>
    </li>
    {% if has_absolute_url %}
        <li>
            <a href="{% url 'admin:view_on_site' content_type_id original.pk %}" class="viewsitelink">{% translate "View on site" %}</a>
        </li>
    {% endif %}
{% endblock %}

验证

重启Django服务后,进入模型修改页点击"Invoke"按钮,页面会重定向回修改页,顶部将正常显示你设置的info消息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:10:33