Django - 如何显示保存在 ImageField 中的照片?

标签 django imagefield

我已经绕着这个圈子转了几个小时。
我有一个带有 的 UserProfile 模型profile_pic 图像字段。我保存了用户照片,现在我想显示它,但没有任何效果。我浏览了文档,SO,谷歌,但没有结果。
我上传了一张照片,可以看到url保存在数据库中。
这就是我所拥有的:

# models.py
    class UserProfile(models.Model):
        ...
        title       = models.CharField()
        about_me    = models.CharField()
        profile_pic = models.ImageField(upload_to=content_file_name, blank=True)

# views.py
    def user_details(request):
        if request.method == 'POST':
            form = UserProfileForm(request.POST, request.FILES, instance=request.user.get_profile())
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('/')
        else:
            form = UserProfileForm(instance=request.user.get_profile())
        return render_to_response('user_details.html',
                {'user': request.user, 'form': form},
                context_instance=RequestContext(request))

# user_details.html
    {% for field in form %}
      {% if field.name != "profile_pic" %}
        <!-- display regular fields -->
        {{ field.label_tag }}{{ field }}
      {% else %}
        <!-- display the user photo -->
        <img src="{{ MEDIA_URL }}{{ field.url }}" />
      {% endif %}
    {% endfor %}

当我查看呈现的 HTML 的源代码时,我看到的只是 MEDIA_URL(即“media/”)而不是照片 url。如果我将 {{ field.url }} 替换为 {{ field }} 我会得到带有标签“Currently”、“Clear”复选框和更改图像选项的 URL。但我看不到图像本身。
谁能建议我做错了什么?

最佳答案

抱歉,我没有足够关注 field 的上下文。 .您从 for 循环中获得的“字段”是一个专门的包装器,其中包含有关该字段的其他数据,用于构建表单。它不是模型本身的字段,只是用于表单目的的表示。

获取profile_pic的当前值,您需要使用表单的实例:

<img src="{{ form.instance.profile_pic.url }}" />
{{ MEDIA_URL }}使用 url 时不需要属性,因为它会自动附加 MEDIA_URL .

关于Django - 如何显示保存在 ImageField 中的照片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9830183/

相关文章:

python - 在 Django search_fields 上实现自定义函数

html - 图像不显示。 Django

django - 使用 Django 的默认存储时,您应该/可以关闭()打开的文件吗?

python - django.db.utils.IntegrityError : NOT NULL constraint failed: products_product. 图像错误与图像字段

python - Django 错误 "' ImageFieldFile' 对象没有属性 'replace' "

带有多对多内联的 Django 模型表单集

django - 如何在不创建节点 ModelField 类的情况下重写单个字段的 __str__() 方法?

python - 获取模型对象时如何默认返回image.url?

file-upload - 德鲁帕尔 7 : Rename files on upload (via filefield)