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

15

我如何使用变量访问对象的属性?我有类似这样的代码:

{% 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,因为它们在list_fields_inscrito列表中。有人知道怎么做吗?

请注意,您尝试实现的内容不叫做连接。 - Aamir Rind
谢谢。它叫什么名字? - Perico
更新了你的问题并检查了我的答案。谢谢! - Aamir Rind
2个回答

17

你可以编写一个模板过滤器来实现这个功能:

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

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


3

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

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

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

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 }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接