我正在尝试创建对我的个人资料的访问,但我的模型属性之一 (profile_picture) 为空,这导致我的个人资料页面崩溃。我已经设置了blank=True,它早些时候可以工作,但从那以后它就停止工作了,我不明白为什么。如果我进入 django admin 并手动添加配置文件,那么我可以再次访问我的配置文件,一切正常。我想我的问题是,为什么即使 profile_pic 属性为空,我也无法查看我的个人资料?不应该blank=True管这个吗?
模型.py
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
# Create your models here.
class UserProfile(models.Model):
user = models.OneToOneField(User)
description = models.CharField(max_length=100, default='')
city = models.CharField(max_length=100, default='')
website = models.URLField(default='')
phone = models.IntegerField(default=0)
profile_picture = models.ImageField(upload_to='profile_pics', blank=True)
def __str__(self):
return self.user.username
Run Code Online (Sandbox Code Playgroud)
视图.py
def edit_user_profile(request):
if request.method == 'POST':
form = EditUserProfileForm(request.POST, instance=request.user.userprofile)
if form.is_valid():
form.save()
return redirect('/accounts/profile')
else:
form = EditUserProfileForm(instance=request.user)
args = {'form': form}
return render(request, 'accounts/edit_user_profile.html', args)
Run Code Online (Sandbox Code Playgroud)
简介.html
<div class="container">
<br>
<h2>{{ user }}</h2>
<br>
<p>Name: {{ user.first_name }} {{ user.last_name }}</p>
<img src="{{ user.userprofile.profile_picture.url }}" width="240px">
<p></p>
<p>Motto: {{ user.userprofile.description }}</p>
<p>Youtube: <a href="{{ user.userprofile.website }}">{{ user.userprofile.website }}</a></p>
<p>About Me: {{ user.userprofile.city }}</p>
<p>Phone Number: {{ user.userprofile.phone }}</p>
<a href="{% url 'edit_profile' %}">Edit Profile</a><br>
<!-- if profile is updated succesfully -->
{% if messages %}
{% for message in messages %}
<br><br>{{ message }}
{% endfor %}
{% endif %}
</div>
Run Code Online (Sandbox Code Playgroud)
同样,如果我进入 Django 管理员并手动上传照片,我可以访问我的个人资料,但默认情况下,如果没有图像,它将无法工作。
任何见解表示赞赏谢谢
这是因为模板中的代码{{ user.userprofile.profile_picture.url }}。
即使您的 profile_picture 没有,它也会尝试查找图片的 url。
只需添加if/else模板,或者如果您有默认图像,则添加方法。
IE。模板中的 if/else
{% if user.userprofile.profile_picture %}
<img src="{{ user.userprofile.profile_picture.url }}" width="240px">
{% else %}
<img src="{% static 'your_default_img_path' %}" width="240px">
{% endif %}
Run Code Online (Sandbox Code Playgroud)
或者使用图片的方法
# Create your models here.
class UserProfile(models.Model):
user = models.OneToOneField(User)
description = models.CharField(max_length=100, default='')
city = models.CharField(max_length=100, default='')
website = models.URLField(default='')
phone = models.IntegerField(default=0)
profile_picture = models.ImageField(upload_to='profile_pics', blank=True)
def __str__(self):
return self.user.username
def get_profile_picture(self):
if self.profile_picture
return profile_picture_url
else:
return 'your_default_img_url_path'
Run Code Online (Sandbox Code Playgroud)