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

如何翻译Django Admin日志条目动作并优化日志显示格式?

优化Django Mezzanine Admin日志显示方案

核心思路

要实现翻译动作标识、移除JSON格式字符并保留字段名,需重写Admin日志的消息解析逻辑,结合Django翻译系统处理动作文本,最终通过模板或过滤器渲染友好格式。

具体实现步骤

1. 编写日志消息解析函数

在项目的工具模块(如utils.py)中创建解析函数,处理change_message的JSON内容:

import json
from django.utils.translation import gettext as _

def parse_admin_log_message(change_message):
    try:
        message_data = json.loads(change_message)
        if not message_data:
            return ""
        
        for entry in message_data:
            # 处理修改动作,翻译标识并拼接字段
            if "changed" in entry:
                action_text = _("修改了")
                fields = entry["changed"]["fields"]
                field_list = ", ".join(fields)
                return f"{action_text} {field_list}"
            # 扩展处理添加/删除动作(按需)
            elif "added" in entry:
                return _("添加了")
            elif "deleted" in entry:
                return _("删除了")
        return ""
    except (json.JSONDecodeError, KeyError):
        return change_message

2. 自定义Admin日志模板

复制Django默认的Admin日志模板(路径通常为django/contrib/admin/templates/admin/logentry/change_list.html)到项目模板目录,替换日志消息的渲染代码:
找到{{ entry.change_message }}的位置,修改为:

{% load i18n %}
{% with message=entry.change_message %}
    {% if message %}
        {% from your_app.utils import parse_admin_log_message %}
        {{ parse_admin_log_message(message) }}
    {% endif %}
{% endwith %}

3. 注册模板过滤器(更简洁的调用方式)

在应用的templatetags目录下创建admin_log_tags.py:

from django import template
from django.utils.safestring import mark_safe
from your_app.utils import parse_admin_log_message

register = template.Library()

@register.filter
def format_log_message(change_message):
    return mark_safe(parse_admin_log_message(change_message))

之后在模板中加载并使用过滤器:

{% load admin_log_tags %}
{{ entry.change_message|format_log_message }}

4. 配置动作文本翻译

在项目的翻译文件(如locale/zh/LC_MESSAGES/django.po)中添加对应翻译条目:

msgid "修改了"
msgstr "修改了"
msgid "添加了"
msgstr "添加了"
msgid "删除了"
msgstr "删除了"

执行python manage.py compilemessages编译翻译文件。

效果验证

完成配置后,原日志内容[{"changed": {"fields": ["Content", "Keywords"]}}]会被渲染为修改了 Content, Keywords的友好格式,动作标识已翻译,JSON格式字符完全移除,字段名保留原样。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:45:27