Ответ 1
Вам нужны {{ image.image.url }}
и {{ image.image.path }}
, а {{ image }}
- объект изображения
В моем приложении Django есть следующая модель:
class Image(models.Model):
image = models.ImageField(
upload_to='images/',
height_field='height',
width_field='width'
)
credit = models.CharField(max_length=50, blank=True)
caption = models.TextField(blank=True)
article = models.ForeignKey(Article)
width = models.PositiveIntegerField(
blank = True, null = True,
editable = False,
default = 0
)
height = models.PositiveIntegerField(
blank = True, null = True,
editable = False,
default = 0
)
Я установил MEDIA_ROOT в каталог с именем/hmedia/внутри моего веб-корня Apache, и я установил MEDIA_URL в 'http://localhost/hmedia/'
. Кажется, что это сработало - я успешно загрузил пару изображений через сайт администратора Django, и я могу просматривать эти изображения с помощью http://localhost/hmedia/images/[filename]
. И админ-сайт Django фактически показывает мне имя файла и ссылки на прямой URL для каждого изображения, а ссылки работают.
Моя проблема в том, что я не могу понять, как получить URL-адреса или имена этих изображений в моем шаблоне:
<ul>
{% for image in article.image_set.all %}
<li>Caption: "{{image.caption}}", Credit: "{{image.credit}}", URL: "{{image.url}}"</li>
{% endfor %}
</ul>
Вышеприведенный шаблон приводит к этому выводу:
<ul>
<li>Caption: "here an image caption", Credit: "some photographer", URL: ""</li>
<li>Caption: "Another caption here", Credit: "Another photographer", URL: ""</li>
</ul>
Другими словами, он правильно выводит свойства заголовка и кредита для каждого изображения, но он не выводит ничего для {{image.url}}.
Как получить URL-адрес изображения в моем шаблоне? Как это делает шаблон интерфейса администратора Django? (Я зародился в каталоге шаблонов admin, но не могу найти то, что ищу.)
Вам нужны {{ image.image.url }}
и {{ image.image.path }}
, а {{ image }}
- объект изображения
Измените код следующим образом:
<ul>
{% for image in article.image_set.all %}
<li>Caption: "{{ image.caption }}", Credit: "{{ image.credit }}", URL: "<a href ='/{{ image.image }}'{{ image.image }}</a>"</li>
{% endfor %}
</ul>
Измените {{image.url}} на {{image.image}}, потому что '.image' содержит местоположение изображения. Причина, по которой вы не получаете никакого значения от ".url", заключается в том, что у вас нет URL-адреса поля в вашем классе Image в ваших моделях.
Создайте папку "статический" в проекте django и добавьте это в свой файл настроек
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
Если у вас нет этой строки в файле настроек, добавьте ее
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
Теперь в шаблоне вы можете использовать
{% static image.image.url %}