用户注册我的应用程序时,他进入个人资料页面时会收到此错误。
The 'image' attribute has no file associated with it. Exception Type: ValueError Error during template rendering In template C:\o\mysite\pet\templates\profile.html, error at line 6 1 <h4>My Profile</h4> 2 3 {% if person %} 4 <ul> 5 <li>Name: {{ person.name }}</li> 6 <br><img src="{{ person.image.url }}"> Traceback Switch back to interactive view File "C:\o\mysite\pet\views.py" in Profile 71. return render(request,'profile.html',{'board':board ,'person':person})
我认为发生此错误是因为我的模板需要图像,并且看到他刚刚注册,除非他进入编辑页面并添加页面,然后他可以访问配置文件页面,否则他不能添加图像。
我的profile.html
<h4>My Profile</h4> {% if person %} <ul> <li>Name: {{ person.name }}</li> <br><img src="{{ person.image.url }}"> </ul> {% endif %}
我的个人资料功能在views.py
def Profile(request): if not request.user.is_authenticated(): return HttpResponseRedirect(reverse('world:LoginRequest')) board = Board.objects.filter(user=request.user) person = Person.objects.get(user=request.user) return render(request,'profile.html',{'board':board ,'person':person})
我通过创建2个Person对象实例并使用if分隔它们的方式尝试了该解决方案,但未成功。
<h4>My Profile</h4> {% if person %} <ul> <li>Name: {{ person.name }}</li> </ul> {% endif %} {% if bob %} <ul> <br><img src="{{ bob.image.url }}"> </ul>
我对Profile函数的解决方案
def Profile(request): if not request.user.is_authenticated(): return HttpResponseRedirect(reverse('world:LoginRequest')) board = Board.objects.filter(user=request.user) person = Person.objects.get(user=request.user) bob = Person.objects.get(user=request.user) return render(request,'profile.html',{'board':board ,'person':person,'bob':bob})
我一直在阅读内置模板标签和过滤器的文档,我认为这里的解决方案是使用(和)模板标签,但是我似乎无法正确使用它。
如何配置此模板以使图片成为一种选择。如果他们没有照片,请留下,但显示人员姓名。
bob并且person是同一对象,
person = Person.objects.get(user=request.user) bob = Person.objects.get(user=request.user)
因此,你可以仅使用人员。
在你的模板中,首先检查是否image存在,
{% if person.image %} <img src="{{ person.image.url }}"> {% endif %}
不会违反DRY的更好方法是在模型类中添加一个辅助方法,例如:
@property def image_url(self): if self.image and hasattr(self.image, 'url'): return self.image.url
并使用default_if_none模板过滤器提供默认网址:
<img src="{{ object.image_url|default_if_none:'#' }}" />