如何在模板中显示ImageField图像?

时间:2017-03-22 12:48:30

标签: python html django

我已经编写了以下代码,url正在被提取并且在本地主机admin 127.0.0.1:8080/admin中,但是它没有在我的网站上显示个人资料图片。 我的代码如下  在models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name="profile")
    name = models.CharField(max_length=250, null=True, blank=True)
    profile_image = models.ImageField(upload_to = get_upload_file_name, null=True, blank=True)
    url=models.CharField(max_length=500,null=True,blank=True)
    def __str__(self):
        return u'%s profile' % self.user.username

在views.py

def home(request):
   context ={'request': request, 'user': request.user}
   return render(request,'home.html',context)

在home.html中,我写了以下内容

{% extends 'base.html' %}
{% block main %}
 <div>
 <h1>authentication demo</h1>
 <p>
   <ul>
   {% if user and not user.is_anonymous %}
     <li>
       <a>Hello {{ user.get_full_name|default:user.username }}!</a>
     </li>


  <img src="{{ userprofile.url }}" alt="Some alt text">
 </p>
 </div>
{% endblock %}

问题是我应该在html中添加什么以及如何调用模型对象。

2 个答案:

答案 0 :(得分:0)

首先,您必须get UserProfile这样的对象:

# views.py

from django.shortcuts import get_object_or_404

def home(request):
    user_profile = get_object_or_404(UserProfile, user=request.user)
    context = {
        'request': request, 
        'user': request.user,
        'user_profile': user_profile,
    }
    return render(request, 'home.html', context)

然后在您的HTML文件中执行以下操作:

{% extends 'base.html' %}

{% block main %}
    <div>
        <h1>authentication demo</h1>
        <p>
            <ul> {% if user_profile and not user_profile.user.is_anonymous %}
                <li><a>Hello {{ user_profile.user.get_full_name|default:user.username }}!</a></li>
            <img src="{{ user_profile.profile_image.url }}" alt="Some alt text">
        </p>
    </div>
{% endblock %}

答案 1 :(得分:0)

您正在尝试打印{{ userprofile.url }},但您的上下文中没有userprofile个对象。

您应该可以使用个人资料模型中使用的user related_name通过profile对象访问它;请务必使用正确的个人资料字段(profile_image,而不是url),并使用该字段的url property

<img src="{{ user.profile.profile_image.url }}" alt="Some alt text">