繁体   English   中英

如何使用 Django 模板中的变量访问对象的属性?

[英]How to access an attribute of an object using a variable in django template?

如何使用变量访问对象的属性? 我有这样的事情:

{% for inscrito in inscritos %}
   {% for field in list_fields_inscrito %}
      {{inscrito.field}} //here is the problem
   {% endfor %}
{% endfor %}

例如 Inscrito 有: inscrito.id、inscrito.Name 和 inscrito.Adress,我只想打印 inscrito.id 和 inscrito.Name 因为 id 和 Name 在 list_fields_inscrito 中。

有人知道这是怎么做的吗?

您可以为此编写模板过滤器:

myapp/templatetags/myapp_tags.py

from django import template

register = template.Library()

@register.filter
def get_obj_attr(obj, attr):
    return getattr(obj, attr)

然后在模板中,您可以像这样使用它:

{% load myapp_tags %}

{% for inscrito in inscritos %}
   {% for field in list_fields_inscrito %}
      {{ inscrito|get_obj_attr:field }}
   {% endfor %}
{% endfor %}

您可以阅读有关编写自定义模板标签的更多信息。

非字符串属性的固定答案

所选答案不包括您需要访问非字符串属性的情况。

如果您尝试访问不是字符串的属性,则必须使用以下代码:

from django import template

register = template.Library()

@register.filter
def get_obj_attr(obj, attr):
    return obj[attr]

为此,在您的应用程序文件夹中创建一个名为 templatetags 的文件夹,然后使用您想要的任何名称创建一个 python 文件并将上面的代码粘贴到其中。

在您的模板中,使用{% load YOUR_FILE_NAME %}全新的过滤器,确保将 YOUR_FILE_NAME 更改为您的实际文件名。

现在,在您的模板上,您可以使用以下代码访问对象属性:

{{ PUT_THE_NAME_OF_YOUR_OBJECT_HERE|get_obj_attr:PUT_THE_ATTRIBUTE_YOU_WANT_TO_ACCESS_HERE }}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM