如何翻译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
相关产品推荐
相关产品推荐

