Есть модель:
class Blahblah(models.Model): name1 = models.CharField(blank=True) name2 = models.CharField(blank=True) name3 = models.CharField(blank=True) name4 = models.CharField(blank=True) describe = models.TextField(blank=True) stack = models.IntegerField(blank=True, null=True) # и ещё штук 10 разнообразного типа полей.
Во вьюхе делаю запрос для вывода в шаблон:
# Нужны все поля модели. to_template = Blahblah.objects.all() # Отдаю на рендер в шаблон. return render(request, 'mytemplate.html', {'to_template': to_template})
В шаблоне должны выводиться только не пустые поля!
Сейчас это сделано максимально просто.
{% if to_template.name1 %} <h5>Name1:</h5> <p>{{ to_template.name1|safe }}</p> <hr/> {% endif %} {% if to_template.name2 %} <h5>Name2:</h5> <p>{{ to_template.name2|safe }}</p> <hr/> {% endif %} {% if to_template.name3 %} <h5>Name3:</h5> <p>{{ to_template.name3|safe }}</p> <hr/> {% endif %} {% if to_template.name4 %} <h5>Name4:</h5> <p>{{ to_template.name4|safe }}</p> <hr/> {% endif %} {% if to_template.describe %} <h5>Describe</h5> <p>{{ to_template.describe|safe }}</p> <hr/> {% endif %} {% if to_template.stack %} <h5>Stack</h5> <p>{{ to_template.stack|safe }}</p> <hr/> {% endif %}
Как можно сократить код?
Или этот вариант правильный?
Мне кажется он не соответствует принципам DRY.
Как вариант в запросе во вьюхе указать, что бы выбирались все непустые поля?
Но как это сделать без указания имени полей?