Django模板如何校验动态构造的key对应对象属性是否有有效值
Django模板动态判断字典值为空添加样式类方案
方案1:视图层预处理(推荐新手使用)
Django模板原生不支持动态键查字典,最简洁不易出错的方式是在视图层提前计算好对应语言的字段值再传入模板:
- 视图层代码示例:
def your_view(request): # 你原有逻辑 language_code = "ar" # 替换为你实际的language_code变量来源 draft = { "name_ar": "test arabic", "name_en": "test english", "name_tr": "test turkish", "name_nl": "", } # 提前计算当前语言对应的名称值 current_name = draft.get(f"name_{language_code}", "") return render(request, "your_template.html", {"current_name": current_name})
- 模板层代码直接判断即可:
<span class="{% if not current_name %}grey-color{% endif %}"> {{ current_name|default:"未填写" }} </span>
方案2:模板层实现动态取值
如果必须在模板层处理动态键查询,需要先自定义模板过滤器实现字典动态取值:
- 首先在你的Django应用目录下创建
templatetags文件夹,文件夹内新增空文件__init__.py,再新增dict_utils.py文件,内容如下:
from django import template register = template.Library() @register.filter def get_item(dictionary, key): """根据动态键获取字典值""" return dictionary.get(key, "")
- 确保你的应用已经加入到项目
settings.py的INSTALLED_APPS列表中,之后在模板顶部加载自定义过滤器:
{% load dict_utils %}
- 完整的模板判断逻辑:
{% with name='name_'|add:language_code %} {% with target_value=draft|get_item:name %} <span class="{% if not target_value %}grey-color{% endif %}"> {{ target_value }} </span> {% endwith %} {% endwith %}
内容的提问来源于stack exchange,提问作者Hemadri Dasari
相关产品推荐
相关产品推荐

