Как получить имя файла, загруженного в поле изображения?
Мне нужно вставить в шаблон имя файла, который был загружен в поле изображения экземпляра.
Мои занятия:
def conference_directory_path(instance, filename):
return 'dialogues/conferences/conference_{0}/avatar/{1}'.format(instance.id, filename)
class Dialogue(models.Model):
...
avatar = models.ImageField(upload_to=conference_directory_path, blank=True)
...
Шаблон:
<img src="/static/dialogues/conferences/conference_{{ dialogue.id }}/avatar/{{ dialogue.avatar.filename }}" alt="">
Но dialog.avatar.filename - пустая строка после рендеринга. В чем дело? Диалог является примером модели диалога.
1 ответ
Решение
То, что хранится в базе данных, это имя файла, а не данные. Как получить доступ к нему описано здесь:
https://docs.djangoproject.com/en/1.10/ref/models/fields/
Все, что будет храниться в вашей базе данных, это путь к файлу (относительно MEDIA_ROOT). Скорее всего, вы захотите использовать вспомогательный атрибут url, предоставленный Django. Например, если ваш ImageField называется mug_shot, вы можете получить абсолютный путь к вашему изображению в шаблоне с помощью {{ object.mug_shot.url }}.
так что у нас есть
<img src="{{ dialogue.avatar.url }}" alt="">