Шаблоны Django: цикл через и печать все доступные свойства объекта?

Мне назвали объект базы данных manor_stats, приблизительно с 30 полями. Для большинства строк большинство этих полей будет пустым.

В моем шаблоне я хотел бы циклично выполниться через все поля в строке и информацию о печати только для полей, которые не являются пустыми.

Например, существует поле, названное "именем": я хотел бы распечатать <li>Name: {{ manor_stats.name }}</li> в шаблоне ONLY для тех объектов, где поле не является пустым. Идеально я хотел бы вытянуть на "Имя": от где-нибудь автоматически также, вместо того, чтобы определить его.

Я знаю, что мог использовать {% 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 %}

Надежда, которая имеет смысл...

23
задан AP257 7 February 2010 в 17:07
поделиться

1 ответ

Вы можете добавить метод в свою модель 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 %}
50
ответ дан 29 November 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: