我已经在这里玩了好几个小时了.
我有一个带有profile_pic ImageField 的UserProfile模型.我保存了用户照片,现在我想显示它,但没有任何效果.我浏览了文档,所以,谷歌,没有结果.
我上传了一张照片,我可以看到该网址已保存在数据库中.这就是我所拥有的:
# 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 %}
Run Code Online (Sandbox Code Playgroud)
当我查看呈现的HTML的来源时,我看到的只是MEDIA_URL(即'media /'),而不是照片网址.如果我用{{field}}替换{{field.url}},我会获得带有"当前"标签的网址,一个"清除"复选框以及一个更改图片的选项.但我看不到图像本身.
任何人都可以建议我做错了什么?
Chr*_*att 19
对不起,我没有给予足够的关注field.从for循环获得的"字段"是一个专门的包装器,其中包含有关该字段的其他数据,以便构造表单.它不是模型本身的字段,只是为了表单的目的而表示它.
要获取当前值profile_pic,您需要使用表单的实例:
<img src="{{ form.instance.profile_pic.url }}" />
Run Code Online (Sandbox Code Playgroud)
{{ MEDIA_URL }}使用url属性时不需要,因为它会自动附加MEDIA_URL.
这对我有用:
{% for field in form %}
<p>
{{ field.errors }}
{{ field.label_tag }}
{% if field.field|get_type == "django.forms.fields.ImageField" and field.value %}
<br/><img src="{{ field.value.url }}" width="240"></img></br>
{% endif %}
{{ field }}
</p>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
get_type是一个模板标签,定义如下:
from django import template
register = template.Library()
@register.filter
def get_type(value):
t = type(value)
return t.__module__ + "." + t.__name__
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14413 次 |
| 最近记录: |