Если структура у статей похожая например: главный заголовок, заголовок, абзац, картинка, заголовок, абзац, картинка и .т. д. то можно реализовать на одном шаблоне. В модель прописать что-то типа:
Python:
class Article(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateTimeField(auto_now_add=True)
photo_1 = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True)
photo_2 = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True)
photo_3 = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True)
photo_4 = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True)
photo_5 = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True)
photo_6 = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True)
paragraph_1 = models.TextField(blank=True)
subheader_1 = models.CharField(max_length=200, blank=True)
paragraph_2 = models.TextField(blank=True)
subheader_2 = models.CharField(max_length=200, blank=True)
paragraph_3 = models.TextField(blank=True)
subheader_3 = models.CharField(max_length=200, blank=True)
paragraph_4 = models.TextField(blank=True)
subheader_4 = models.CharField(max_length=200, blank=True)
paragraph_5 = models.TextField(blank=True)
subheader_5 = models.CharField(max_length=200, blank=True)
paragraph_6 = models.TextField(blank=True)
subheader_6 = models.CharField(max_length=200, blank=True)
is_published = models.BooleanField(default=True)
def __str__(self):
return self.title
А в шаблоне выводить данные если они есть:
Код:
<h1>{{article.title}}</h1>
{% if article.subheader_1 %}
<h2>{{article.subheader_1}}</h2>
{% endif}
{% if article.paragraph_1 %}
<p>{{article.paragraph_1}}</p>
{% endif}
{% if article.photo_1 %}
<img src="{{article.photo_1.upload_to}}" />
{% endif}
...
{% if article.subheader_6 %}
<h2>{{article.subheader_6}}</h2>
{% endif}
{% if article.paragraph_6 %}
<p>{{article.paragraph_6}}</p>
{% endif}
{% if article.photo_6 %}
<img src="{{article.photo_6.upload_to}}" />
{% endif}
Если статьи имеют разную структуру, то под каждую структуру нужно либо делать отдельный шаблон либо использовать переменные контекста (они передаются в шаблон из вью) и условия чтобы в зависимости от них выводить части шаблона (форму комментариев, блок картинок, пагинацию, навигацию, слайдер, отзывы, контакты и т. д.), а сами части хранить в отдельных шаблонах и вставлять в основной при помощи include. Также в качестве частей шаблона можно использовать
шаблонные теги.