如何在Django模板中动态从上下文对象获取值?
解决Django模板中动态获取字典值的问题
Django模板语言不支持直接调用字典的get()方法或使用[]下标访问动态key,这就是你之前写法无效的原因。下面提供两种可行方案:
方案1:自定义模板过滤器(推荐)
这是通用型解决方案,适合在多个模板中复用:
在你的Django应用下创建
templatetags目录,里面新建两个文件:__init__.py(空文件,用于标识这是Python包)custom_filters.py,写入以下代码:from django import template register = template.Library() @register.filter def get_item(dictionary, key): # 若key不存在,返回原key作为备选,避免空输出 return dictionary.get(key, key)
在模板文件开头加载自定义过滤器,然后使用过滤器获取字典值:
{% load custom_filters %} {% for key, value in edit.changes.items %} <p>{{ translator|get_item:key }}</p> {% endfor %}
方案2:视图中预处理数据
如果仅在当前视图使用,可以提前在视图里整理好翻译后的键值对,再传给模板:
修改你的视图函数:
def medical_record_edit_list(request, pk): translator = { "appointment_date" :"Fecha", "diagnosis_type" : " Tipo de Diagnóstico", "main_diagnosis" : "Diagnóstico Principal (CIE-10)", "related_diagnosis" : "Diagnóstico Relacionado (CIE-10)", "objective" : "Objetivo", "mental_exam" : "Exámen Mental", "development" : "Desarrollo", "employed_interventions" : "Intervenciones Utilizadas", "evaluation_instruments" : "Instrumentos de Evaluación", "agreements" : "Acuerdos", "therapeutic_work" : "Expectativas de la Consulta", "remission" : "Remisiones y Contrarremisiones", "finality" : "Finalidad", "external_cause" : "Causas Externas", "conduct" : "Conducta", "exit_state" : "Estado de Salida", "exit_diagnosis" : "Diagnóstico de Egreso (CIE-10)", "exit_condition" : "Condición de Salida" } medical_record_entry = MedicalRecordEntry.objects.get(pk=pk) edit_list = MedicalRecordEdit.objects.filter(medical_record_entry=medical_record_entry).order_by("edit_date") # 预处理每个edit的changes,添加翻译后的键值对 for edit in edit_list: edit.translated_changes = [] for key, value in edit.changes.items(): translated_key = translator.get(key, key) edit.translated_changes.append( (translated_key, value) ) return render(request, 'medical_record/medical_record_edit_list.html', { 'edit_list':edit_list, 'medical_record_entry':medical_record_entry, 'translator': translator })
然后在模板中直接循环预处理后的translated_changes:
{% for translated_key, value in edit.translated_changes %} <p>{{ translated_key }}</p> {% endfor %}
内容的提问来源于stack exchange,提问作者alejandrodgz
相关产品推荐
相关产品推荐

