【问题标题】:How to access an attribute of an object using a variable in django template?如何使用 django 模板中的变量访问对象的属性?
【发布时间】:2015-08-22 15:52: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,因为 id 和 Name 在 list_fields_inscrito 中。

有人知道怎么做吗?

【问题讨论】:

  • 仅供参考,您要实现的目标不称为串联
  • 谢谢。怎么称呼?
  • 更新了您的问题并查看我的答案。谢谢!

标签: django templates


【解决方案1】:

你可以为此编写一个模板过滤器:

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的信息。

【讨论】:

    【解决方案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 更改为您的实际文件名。

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

    {{ PUT_THE_NAME_OF_YOUR_OBJECT_HERE|get_obj_attr:PUT_THE_ATTRIBUTE_YOU_WANT_TO_ACCESS_HERE }}
    

    【讨论】:

      猜你喜欢
      • 2012-05-01
      • 2012-06-30
      • 2011-06-10
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 2012-07-02
      • 2021-04-20
      • 2021-12-11
      相关资源
      最近更新 更多