python 如何在Django模板中使用动态键从字典中检索值

am46iovg  于 2023-03-21  发布在  Python
关注(0)|答案(1)|浏览(109)

我需要在Django模板中使用动态键从字典中获取并显示值。

型号

class StatusData(models.Model):
   app= models.CharField(max_length=35)
   status= models.CharField(max_length=3) //possible values - SNY,DVL,TST

    class Meta:
        managed = False

    def __str__(self):
        return self.status

查看.py

all_choices = {'SNY':'Sanity', 'DVL':'Develop', 'TST':'Testing'}
model = StatusData.objects.order_by('-app') 

context = {
   "choices": all_choices,
   "modelData": model,
}

Django模板

<html>
   {% for model%}
   <table>
     <tr>
        <td>{{ model.id }}</td>
        <td>{{ choices.model.status }}</td>  // -- problem line
     </tr>
   </table>
   {% endfor %}
</html>

如果我硬编码任何特定的键,如{{ choices.SNY }}-它会按预期导出值。
如何使用model.status返回的动态键(即{{ choices.<model.status> }})获取值?

zkure5ic

zkure5ic1#

你不能简单的在模板中使用Python的逻辑。使用变量从dict中获取并不那么简单。你可以尝试创建一个自定义模板标签。
在应用中创建文件:“your_project/your_app/templatetags/custom_tags.py“(以及同一文件夹中的空“__init__.py“):

from django import template

register = template.Library()

all_choices = {'SNY':'Sanity', 'DVL':'Develop', 'TST':'Testing'}

@register.filter(name='get_from_all_choices') 
def get_from_all_choices (key):
    return all_choices.get(key, None)

然后在模板中:

{% load custom_tags %}

{{ model.status|get_from_all_choices }}

相关问题