django - 如何获取上传到ima​​gefield的文件的文件名?

标签 django python-3.x templates models imagefield

我需要在模板中传递在实例图像字段中上传的文件的文件名。

我的类(class):

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在渲染后是空字符串。怎么了?对话是对话模型的一个实例。

最佳答案

数据库中存储的实际上是文件名而不是数据。此处描述了如何访问它:

https://docs.djangoproject.com/en/1.10/ref/models/fields/#filefield

All that will be stored in your database is a path to the file (relative to MEDIA_ROOT). You’ll most likely want to use the convenience url attribute provided by Django. For example, if your ImageField is called mug_shot, you can get the absolute path to your image in a template with {{ object.mug_shot.url }}.

所以我们有

<img src="{{ dialogue.avatar.url }}" alt="">

关于django - 如何获取上传到ima​​gefield的文件的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41819650/

相关文章:

python - 如何保存棋盘游戏? Python

python - 查找值为真的 boolean 数组的索引

django - 如何在同一个模板中使用两个不同的 Django Form?

python - 需要找到有效的方法来找到强数

javascript - 如何使用django从javascript函数从静态文件加载图像

c++ - 是否可以使 typedef 仅对子类可见?

c++ - SFINAE 用作返回类型,但不是参数类型

c++ - 使用 std::views 进行模板类型推断

python - 当数据已存在于数据库中时,如何减少 Django 中 CharField 的 max_length

python - Django 自定义模型字段 : to_python() not called