Django - 默认配置文件图片未显示

时间:2017-12-18 01:58:33

标签: python django imagefield

我对图像和图像域有疑问。但是,我选择的默认图片不显示,只显示空白圆圈。这是我的default picture

Models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    description = models.CharField(max_length=255, default='')
    city = models.CharField(max_length=100, default='')
    website = models.URLField(default='')

    def __str__(self):
        return self.user.username

class ProfilePicture(models.Model):
    user = models.ForeignKey(User)
    image = models.ImageField(upload_to='profile_image', default='profile_image/Default.jpg')

Forms.py

class UploadPictureForm(forms.Form):
    image = forms.ImageField()

profile.html

<div class="container">
    <div id="left">
        <div id="profilecard">
             {% if user.userprofile.image %}
                <img class="circular--square" src="{{ }}" width="200" height="200">
            {% endif %}
            <div id="info">
                <br>
                <h3>{{ user.first_name }} {{ user.last_name }}</h3>
                <p>@{{ user }}</p>
                <p>{{ user.userprofile.city }}</p>
                <p>{{ user.userprofile.website }}</p>
                <p><i>{{ user.userprofile.description }}</i></p>
            </div>
        </div>

2 个答案:

答案 0 :(得分:0)

src中的profile.html标记未提交。如果您想使用默认图片,可以在模板中添加else标记,并将src指向静态文件。

<div class="container">
    <div id="left">
        <div id="profilecard">
             {% if user.userprofile.image %}
                <img class="circular--square" src="{{ user.userprofile.image.url }}" width="200" height="200">
            {% endif %}
            <div id="info">
                <br>
                <h3>{{ user.first_name }} {{ user.last_name }}</h3>
                <p>@{{ user }}</p>
                <p>{{ user.userprofile.city }}</p>
                <p>{{ user.userprofile.website }}</p>
                <p><i>{{ user.userprofile.description }}</i></p>
            </div>
        </div>
    </div>
</div>

答案 1 :(得分:0)

您的代码中存在错误,您无法从userprofile模型中获取图像,因此您需要执行此操作:

改变你的:

{% if user.userprofile.image %}

为:

{% if user.profilepicture_set.count > 0 %}

将img标签的src属性更改为:

src="{{ user.profilepicture_set.all.0.image.url }}"

固定代码:

<div class="container">
    <div id="left">
        <div id="profilecard">
             {% if user.profilepicture_set.count > 0 %}
                <img class="circular--square" src="{{ user.profilepicture_set.all.0.image.url }}" width="200" height="200">
            {% endif %}
            <div id="info">
                <br>
                <h3>{{ user.first_name }} {{ user.last_name }}</h3>
                <p>@{{ user }}</p>
                <p>{{ user.userprofile.city }}</p>
                <p>{{ user.userprofile.website }}</p>
                <p><i>{{ user.userprofile.description }}</i></p>
            </div>
        </div>
    </div>
</div>

related_name班级ForeignKey上使用ProfilePicture将自定义用户的profilepicture_set密钥

user = models.ForeignKey(User, related_name='image')

您可以在

等模板上访问它
{% if user.image.count > 0 %}
     <img class="circular--square" src="{{ user.image.all.0.image.url }}" width="200" height="200">
{% endif %}

如果个人资料图片只有一个,你也可以使用OneToOneField到ProfilePicture用户字段:

user = models.OneToOneField(User)

和模板:

{% if user.profilepicture %}
     <img class="circular--square" src="{{ user.profilepicture.image.url }}" width="200" height="200">
{% endif %}