因此,我正在创建一个小型网站,希望用户能够将个人资料图片上传到他们的页面。但是,我遇到了一个问题,图像无法渲染。我已经为用户提供了上传个人资料图片的实际过程,并将其保存到目录中,但是不会在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 %}
我希望显示个人资料图片,但是目前,未正确显示图片的默认占位符出现了。谢谢:)
答案 0 :(得分:0)
您是否已添加行
{% load static %}
在由profile.html扩展的基本模板中?必须在开始时包括此行以渲染图像和其他静态文件。还如您在django static files
中所述将static_url设置为'/ static /'答案 1 :(得分:0)
您是否检查过图像是否正确保存在媒体文件夹中但未正确加载?再次检查mainapp/media/profile_pics
文件夹。
我认为UserProfileInfo.save()
函数中存在一个循环。您正在通过save()
的{{1}}功能加载图像,但该图像尚未正确保存,并且仅保存了一个没有任何内容的临时文件。