这是假设 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!
