我想在HTML模板中显示dinamically一个表。在我看来:
def get_object( request ):
objects = MyObject.objects.all()
return render(request, 'table.html', { 'myObjects':objects, 'fields':ObjectAdmin.list_display})
字符串
然后在'table.html'中
<thead class="tables-success">
<tr>
{% for field in fields %}
<th>{{ field }}</th>
{% endfor %}
</tr>
</thead>
{% for row in myObjects %}
<tr>
{% for field in fields %}
<td>{{ getattr(row, field) }}</td>
<!--<td>{{ row|getattr:field }}</td>-->
{% endfor %}
</tr>
{% endfor %}
型
在admin.py
class MyObjectAdmin(admin.ModelAdmin):
list_display = [ 'name']#
list_per_page = 8
search_fields = [ 'name']
admin.site.register( Object, MyObjectAdmin )
型
但我收到了以下错误:
Could not parse the remainder: '(row, field)' from 'getattr(row, field)'
型
或者是
Exception Value: Invalid filter: 'getattr'
型
如果我使用
{{ row|getattr:field }}
型
1条答案
按热度按时间zsohkypk1#
Django的模板语言不允许调用任何方法(带括号,所以这意味着任何带参数的方法)。至于模板过滤器,你只能使用内置的[Django-doc],或者你注册的。
因此,很多人制作了一个自定义模板过滤器并注册了该过滤器。但这往往不是一个好主意:之所以不能做到这一点是有原因的:防止在模板中写入业务逻辑。
可以简单地预处理模板中的数据:
字符串
然后在模板中使用:
型
话虽如此,已经有很多库实现了您的目标,比如
django-tables2
[readthedocs.io]。使用list_display
也有一点风险,因为ModelAdmin
允许向list_display
添加函数,或者ModelAdmin
本身定义的方法,因此没有说这些是对象属性的名称。