为什么我的个人资料图片无法显示Django

时间:2019-09-10 23:43:48

标签: python django

因此,我正在创建一个小型网站,希望用户能够将个人资料图片上传到他们的页面。但是,我遇到了一个问题,图像无法渲染。我已经为用户提供了上传个人资料图片的实际过程,并将其保存到目录中,但是不会在HTML文档中加载

我一直在网上寻找答案,但没有找到答案。我尝试重命名models.py文件中的字段,因为我认为这可能是需要特定字段名称的问题。这些都不起作用

这是models.py中的相关UserProfileInfo模型

class UserProfileInfo(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=50,blank=True,null=True) #models.OneToOneField(User,'on_delete')#
    last_name = models.CharField(max_length=50,blank=True,null=True) #models.OneToOneField(User,'on_delete')#
    bio = models.CharField(max_length=150)
    image = models.ImageField(upload_to='profile_pics',default='default.png')
    joined_date = models.DateTimeField(blank=True,null=True,default=timezone.now)
    verified = models.BooleanField(default=False)

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

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)

这是用于用户注册的views.py文件

def register(request):
    registered = False

    if request.method == 'POST':
        user_form = UserForm(data=request.POST)
        profile_form = UserProfileInfoForms(data=request.POST)

        if user_form.is_valid and profile_form.is_valid():
            user = user_form.save()
            user.set_password(user.password)
            user.save()

            profile = profile_form.save(commit=False)
            profile.user = user

            if 'image' in request.FILES:
                profile.image = request.FILES['image']

            profile.save()
            user.save()

            registered = True
        else:
            print(user_form.errors,profile_form.errors)
    else:
        user_form = UserForm()
        profile_form = UserProfileInfoForms()

    return render(request,'mainapp/registration.html',{'user_form':user_form,'profile_form':profile_form,'registered':registered,})

最后是profile.html

{% extends 'mainapp/base.html' %}

{% block content %}

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

我希望显示个人资料图片,但是目前,未正确显示图片的默认占位符出现了。谢谢:)

2 个答案:

答案 0 :(得分:0)

您是否已添加行

{% load static %}

在由profile.html扩展的基本模板中?必须在开始时包括此行以渲染图像和其他静态文件。还如您在django static files

中所述将static_url设置为'/ static /'

答案 1 :(得分:0)

您是否检查过图像是否正确保存在媒体文件夹中但未正确加载?再次检查mainapp/media/profile_pics文件夹。

我认为UserProfileInfo.save()函数中存在一个循环。您正在通过save()的{​​{1}}功能加载图像,但该图像尚未正确保存,并且仅保存了一个没有任何内容的临时文件。