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

如何在Django模板中动态从上下文对象获取值?

解决Django模板中动态获取字典值的问题

Django模板语言不支持直接调用字典的get()方法或使用[]下标访问动态key,这就是你之前写法无效的原因。下面提供两种可行方案:

方案1:自定义模板过滤器(推荐)

这是通用型解决方案,适合在多个模板中复用:

  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)
      
  2. 在模板文件开头加载自定义过滤器,然后使用过滤器获取字典值:

    {% 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 03:35:40