Django模板如何不修改XML源,将字典键名替换为用户友好文本
可行的实现方案
完全可以通过Django模板能力实现键名替换,无需修改原始XML数据,以下是两种最常用的实现方式:
方式1:自定义模板过滤器(推荐,复用性高)
适合多个模板都需要用到键名翻译的场景
- 在你的Django应用目录下新建
templatetags文件夹,文件夹内新增空文件__init__.py,再新建过滤器文件比如kanji_tags.py - 写入过滤器逻辑:
from django import template register = template.Library() # 补全所有你需要的键名映射即可 DICT_KEY_MAPPING = { 'nelson_c': 'Nelson Classic', 'nelson_n': 'Nelson New', 'halpern_njecd': 'Halpern NJECD', 'halpern_kkd': 'Halpern KKD', # 其余键的映射自行补全 } @register.filter def dict_key_humanize(key): # 没有匹配到映射的键会原样返回,避免报错 return DICT_KEY_MAPPING.get(key, key)
- 修改你的模板代码,顶部先加载自定义标签,再调用过滤器:
{% load kanji_tags %} <ul> {% for key, value in dictionaryEntries.items %} <li><b>{{ key|dict_key_humanize }}: </b>{{ value }}</li> {% endfor %} </ul>
方式2:视图传映射表到模板(适合单页使用)
如果只有单个页面需要这个翻译,可以直接在视图层把映射表传入模板上下文,无需编写自定义标签:
- 视图函数中传入映射表:
def your_view(request): # 其余逻辑不变 DICT_KEY_MAPPING = { 'nelson_c': 'Nelson Classic', 'nelson_n': 'Nelson New', # 其余映射补全 } context = { 'dictionaryEntries': your_dict_data, 'key_mapping': DICT_KEY_MAPPING } return render(request, 'your_template.html', context)
- 模板中直接调用:
<ul> {% for key, value in dictionaryEntries.items %} <li><b>{{ key_mapping.key|default:key }}: </b>{{ value }}</li> {% endfor %} </ul>
以上两种方式都完全不需要修改原始XML的标签内容,只需要维护一份映射表即可,后续新增键也只需要更新映射表就行。
内容的提问来源于stack exchange,提问作者Juan Camilo Orjuela
相关产品推荐
相关产品推荐

