gpt4 book ai didi

python - 在 Django 中,如何使用列表项的字符串值来获取对象变量的值?

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:20 26 4
gpt4 key购买 nike

这是假设 columns 是一个包含字符串的列表,每个字符串代表对象 o 的变量之一。

<tbody>
{% for o in objects %}
<tr>
{% for col in columns %}
<td>{{ o.col }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>

例子:

class Dog(models.Model):
name = models.CharField()
age = models.IntegerField()
is_dead = models.BooleanField()

columns = ('name', 'age')

我无法明确输入对象的变量名,必须将其作为另一个列表传递,因为我正在尝试制作一个“通用”模板。此外,并非所有变量都必须向用户显示。

最佳答案

我对 django 不够熟悉,不知道是否有内置的东西,但是......你可以定义你自己的 getattr 版本为 template filter .出于某种原因(我假设是因为它是内置函数),我无法简单地将内置函数注册为新的模板过滤器。无论哪种方式,这就是我定义我的版本的方式:

# This is defined in myapp/templatetags/dog_extras.py
from django import template

register = template.Library()

@register.filter
def my_getattr(obj, var):
return getattr(obj, var)

要使用它,您将像使用任何其他两个 arg 模板过滤器一样使用它:

{{ o|my_getattr:col }}

这是一个完整的示例(不要忘记顶部的“加载”指令!):

{% load dog_extras %}

<table>
<tbody>
{% for o in objects %}
<tr>
{% for col in columns %}
<td>{{ o|my_getattr:col }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>

如果您以前从未制作过自定义模板过滤器,请务必 read the docs!

关于python - 在 Django 中,如何使用列表项的字符串值来获取对象变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8766792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com