假设列是包含字符串的列表,每个字符串代表一个对象 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')
我无法显式输入对象的变量名,必须将其作为另一个列表传递,因为我正在尝试制作一个“通用”模板。此外,并非所有变量都必须显示给用户。
答案 0 :(得分:1)
我对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”指令!):
{% 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!