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

时间:2015-08-22 15:52:15

标签: django templates

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

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

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

2 个答案:

答案 0 :(得分:4)

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

<强>的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 %}

您可以阅读有关writing custom template tags的更多信息。

答案 1 :(得分:2)

针对非字符串属性的固定答案

所选答案未涵盖您需要访问非字符串属性的情况。

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

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更改为您的实际文件名。

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

{{ PUT_THE_NAME_OF_YOUR_OBJECT_HERE|get_obj_attr:PUT_THE_ATTRIBUTE_YOU_WANT_TO_ACCESS_HERE }}

愿我们成为爬虫类动物!