首页 文章

'photo'属性没有与之关联的文件

提问于
浏览
0
Template error:

在模板D:\ virtualEnv \ alumni \ member \ templates \ member \ index.html中,第15行出错

The 'photo' attribute has no file associated with it.   5 :     <!-- Albums -->
   6 :     <div class="row">
   7 :         <div class="col-sm-12">
   8 :             <h3>{{ user.username }}'s Albums</h3>
   9 :         </div>
   10 :         {% if all_persons %}
   11 :             {% for person in all_persons %}
   12 :                 <div class="col-sm-4 col-lg-2">
   13 :                     <div class="thumbnail">
   14 :                         <a href="{% url 'member:detail' person.id %}">
   15 :                             <img src=" {{ person.photo.url }} " class="img-responsive">
   16 :                         </a>
   17 :                         <div class="caption">
   18 :                             <h2>{{ person.name }}</h2>
   19 :                             <h4>{{ person.category }}</h4>
   20 : 
   21 :                             <!-- View Details -->
   22 :                             <a href="{% url 'member:detail' person.id %}" class="btn btn-primary btn-sm" role="button">View Details</a>
   23 : 
   24 :                             
   25 :

追溯:

_resolve_lookup 885中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py”.current = current [bit]

在处理上述异常期间('ImageFieldFile'对象不可订阅),发生了另一个异常:

内部39中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ core \ handlers \ exception.py”response = get_response(request)

文件“D:\ virtualEnv \ lib \ site-packages \ django \ core \ handlers \ base.py”在_get_response 217. response = self.process_exception_by_middleware(e,request)

_get_response 215中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ core \ handlers \ base.py” . response = response.render()

文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ response.py”在render 109中.self.content = self.rendered_content

render_content中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ response.py”86. content = template.render(context,self._request)

渲染66中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ backends \ django.py” . 返回self.template.render(context)

在渲染208中输入文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py” . 返回self._render(context)

在_render 199中输入文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py” . return self.nodelist.render(context)

渲染994中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py”.bit = node.render_annotated(context)

在render_annotated 961中输入文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py” . return self.render(context)

渲染61中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ loader_tags.py” . result = self.nodelist.render(context)

渲染994中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py”.bit = node.render_annotated(context)

在render_annotated 961中输入文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py” . return self.render(context)

在渲染器323中输入文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ defaulttags.py” . 返回nodelist.render(context)

渲染994中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py”.bit = node.render_annotated(context)

在render_annotated 961中输入文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py” . return self.render(context)

在渲染217.文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ defaulttags.py”中nodeList.append(node.render_annotated(context))

在render_annotated 961中输入文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py” . return self.render(context)

文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py”在render 1044中.output = self.filter_expression.resolve(context)

在解析711中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py”.obj = self.var.resolve(context)

解析852中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py”.value = self._resolve_lookup(context)

_resolve_lookup 893中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ template \ base.py”.current = getattr(current,bit)

_get_url 68中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ db \ models \ fields \ files.py” . self._require_file()

_require_file中的文件“D:\ virtualEnv \ lib \ site-packages \ django \ db \ models \ fields \ files.py”46 . 引发ValueError(“'%s'属性没有与之关联的文件 . ”%self . field.name)

异常类型:ValueError at / Exception值:'photo'属性没有与之关联的文件 .

我的意见:

class IndexView(generic.ListView):
    template_name = 'member/index.html'
    context_object_name = 'all_persons'

    def get_queryset(self):
        return Person.objects.all()

class DetailView(generic.DetailView):
    model = Person
    template_name = 'member/detail.html'


class AlbumCreate(CreateView):
    model = Person
    fields = '__all__'

我的模特是:

class Person(models.Model):
    name = models.CharField(max_length=128)
    present_position=models.CharField(max_length=100)
    organization= models.CharField(max_length=150,blank=True)
    address = models.CharField(max_length=150, blank=True)
    tele_land = models.CharField(max_length=15,blank=True)
    tele_cell = models.CharField(max_length=15, blank=True)
    email = models.EmailField(max_length=70, blank=True, null=True, unique=True)
    photo= models.ImageField(upload_to='persons/%Y/%m/%d/',max_length=70, blank=True )
    category = models.ForeignKey('Membership', on_delete=models.CASCADE)

    def get_absolute_url(self):
        return reverse('member:detail', kwargs={'pk': self.pk})

class Membership(models.Model):
    category = models.CharField(max_length=50, blank=False)

输尿管镜气压弹道碎石:

from . import views    
app_name = 'member'
urlpatterns = [    
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
    url(r'member/add/$', views.AlbumCreate.as_view(), name='member-add'),
]

细节模板:

<div class="col-sm-4 col-md-3">
            <div class="panel panel-default">
                <div class="panel-body">
                    <a href="{% url 'member:detail' person.id %}">
                        {% if member.photo %}
                            <img src="{{ member.photo.url }}" class="img-responsive">
                        {% else %}
                            <h3>No image to display</h3>
                        {% endif %}
                    </a>
                    <p>{{member.name}}</p>
                    <p>{{member.present_position}}</p>
                    <p>{{member.organization}}</p>
                    <p>{{member.address}}</p>
                    <p>{{member.tele_land}}</p>
                    <p>{{member.tele_cell}}</p>
                    <p>{{member.email}}</p>
                </div>
            </div>
        </div>

项目网址:

from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
from  django.conf.urls.static import static
from member import urls as member_urls

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include(member_urls, namespace="member")),
]
if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

为什么photo field会出现这些错误?

1 回答

  • 1

    我在模型中使用Stackoverflow的答案解决了这个问题:

    @property
    def photo_url(self):
        if self.photo and hasattr(self.photo, 'url'):
            return self.photo.url
    

    在模板中,使用default_if_none作为默认网址:

    <img src="{{ person.photo_url|default_if_none:'#' }}" />
    

    经过多次搜索和花费多次,这实际上为我提供了正确的答案 .

    希望它能帮助其他人在django模板中加载图像 .

相关问题