Django模板:循环并打印对象的所有可用属性?

我有一个名为manor_stats的数据库对象,大约有30个字段。对于大多数行,大多数这些字段将为空。

在我的模板中,我想循环遍历行中的所有字段,并仅打印不为null的字段的信息。

例如,有一个名为“name”的字段:我想打印< li> Name:{{manor_stats.name}}< / li>在模板中仅对于那些字段不为空的对象。理想情况下,我想从某个地方自动提起“名称:”,而不是指定它。

我知道我可以使用{%if manor_stats.name%}来检查每个字段是否为空,但是我不想为所有字段做30次。

以下是我在views.py中的内容:

manor_stats = Manors.objects.get(idx=id)
return render_to_response('place.html', { 'place' : place, 'manor_stats' : manor_stats }, context_instance = RequestContext(request))

然后在place.html,我想要有一些类似这样的东西(伪代码,表示我不知道该怎么做的位):

{% if manor_stats %} 
<ul>
 {% for manor_stats.property??? in manor_stats %} 
  {% if manor_stats.property %} 
   <li>{{ manor_stats.property.field_name??? }} {{ manor_stats.property.value??? }}</li>
  {% endif %}
 {% endfor %
{% endif %}

希望有意义

您可以向Manors模型添加一个返回所有字段值的方法,您可以在该模型中循环访问这些值,以查看该值是否不为空。

– models.py

class Manors(models.Model)
  #field declarations

  def get_fields(self):
    return [(field.name, field.value_to_string(self)) for field in Manors._meta.fields]

– manor_detail.html

{% for name, value in manor_stats.get_fields %}
  {% if value %}
    {{ name }} => {{ value }}
  {% endif %}
{% endfor %}
翻译自:https://stackoverflow.com/questions/2217478/django-templates-loop-through-and-print-all-available-properties-of-an-object

转载注明原文:Django模板:循环并打印对象的所有可用属性?