Рендеринг контекстных данных шаблона с ссылкой на жестко закодированный HTML в модели Django
У меня есть приложение Django, которое является службой новостей. У меня есть базовая html страница, которая отображает одну статью. До сих пор каждая статья имела стандартный формат, изображение, автор и текстовое содержание. Сейчас я делаю обновление, чтобы позволить статьям иметь несколько изображений между различными абзацами текста статьи.
В настоящее время моя HTML-страница для отображения одной статьи получает свои данные через контекстный объект, который содержит следующую модель статьи:
class Article(models.Model):
title = models.TextField()
author = models.ForeignKey(Author, on_delete=models.CASCADE)
content = models.TextField()
date = models.DateField(default=now)
image = models.ImageField(storage=MediaStorage(), default='')
external_source = models.TextField(null=True, blank=True)
featured = models.BooleanField(null=False, blank=True)
slug = models.SlugField()
album = models.OneToOneField(Album, related_name='album', on_delete=models.CASCADE, null=True, blank=True)
В шаблоне HTML я отображаю содержимое со следующим кодом
<p>
{{ article.content|safe }}
</p>
Поскольку я хочу встроить изображения альбомов в текст, я пытаюсь поместить HTML-код в текстовое поле содержимого, как показано ниже:
Some random article text followed by and image...
<img class="img-responsive single_article_image" src="{{album.image.url}}">
Some more random article text
Проблема в том, что ссылка src на album.image не разрешается из инжектированного контекста, и изображение не отображается. Причина, по которой я не могу жестко закодировать класс img в шаблоне, заключается в том, что тогда нет возможности отображать изображения между текстовыми абзацами статьи.
Объектом в контексте является Article
, поэтому вы всегда должны начинать с него. Как вы делали с рендерингом содержимого:
{{ article.content|safe }}
вы должны сделать с рендерингом связанный Album
объект:
{{ article.album.image.url }}