一尘不染

Django'image'属性没有与其关联的文件

django

用户注册我的应用程序时,他进入个人资料页面时会收到此错误。

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})

我一直在阅读内置模板标签和过滤器的文档,我认为这里的解决方案是使用(和)模板标签,但是我似乎无法正确使用它。

如何配置此模板以使图片成为一种选择。如果他们没有照片,请留下,但显示人员姓名。


阅读 312

收藏
2020-03-31

共2个答案

一尘不染

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 %}
2020-03-31
一尘不染

不会违反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:'#' }}" />
2020-03-31