Как получить имя файла, загруженного в поле изображения?

Мне нужно вставить в шаблон имя файла, который был загружен в поле изображения экземпляра.

Мои занятия:

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="">
Другие вопросы по тегам