2016-08-28 2 views
0
Template error: 

В шаблоне D: \ virtualEnv \ выпускников \ член \ Templates \ член \ 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 : 

Traceback:

Файл "D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ base.py" в _resolve_lookup 885. ток = ток [битном]

во время обработки вышеуказанного исключения (объективистские 'ImageFieldFile' т не subscriptable), произошло еще одно исключение:

Файл "D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ \ Ядро обработчиков \ exception.py" во внутреннем 39. ответ = get_response (запрос)

Файл "D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ основные \ обработчики \ base.py" в _get_response 217. ответ = self.process_exception_by_middleware (е, запрос)

Файл «D: \ virtualEnv \ lib \ site-packages \ django \ core \ handlers \ base.py "in _get_response 215. response = response.render()

Файл "D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ response.py" в визуализации 109. self.content = self.rendered_content

Файл «D: \ virtualEnv \ Lib \ сайт- пакеты \ Джанго \ шаблон \ response.py "в rendered_content 86. содержание = template.render (контекст, self._request)

Файл" D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ бэкэндов \ django.py»в визуализации 66. возвратный self.template.render (контекст)

Файл "D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ base.py" в визуализации 208. вернуться self._render (контекст)

Файл "D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ base.py" в _render 199. Возвращение self.nodelist.render (контекст)

Файл «D: \ virtualEnv \ lib \ site-packages \ django \ template \ base.py» в рендере 994. bit = node.render_annotated (контекст)

Файл «D: \ virtualEnv \ lib \ site-packages» \ django \ template \ base.py "в render_annotated 961. return self.render (контекст)

Файл: D: \ virtualEnv \ lib \ s ИТО-пакеты \ Джанго \ шаблон \ loader_tags.py "в визуализации 61. Результат = self.nodelist.render (контекст)

Файл" D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ база. ру»в визуализации 994. бит = node.render_annotated (контекст)

Файл "D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ base.py" в render_annotated 961. возвратного self.render (контекст)

Файл «D: \ virtualEnv \ lib \ site-packages \ django \ template \ defaulttags.py» в рендере 323. вернуть ноделист.визуализации (контекст)

Файл "D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ base.py" в визуализации 994. битную = node.render_annotated (контекст)

Файл «D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ base.py "в render_annotated 961. возвращения self.render (контекст)

Файл" D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ defaulttags.py "в рендере 217. nodelist.append (node.render_annotated (context))

Файл" D: \ virtualEnv \ lib \ site-packages \ django \ template \ base.py "в render_annotated 961. return self.render (контекст)

Файл" D: \ virtualEnv \ lib \ site-packages \ django \ template \ base.py "в оказывать 1044. выход = self.filter_expression.resolve (контекст)

Файл "D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ base.py" в решимостью 711. OBJ = self.var. решимость (контекст)

Файл "D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ base.py" в решимостью 852. значение = self._resolve_lookup (контекст)

Файл "D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ шаблон \ base.py" в _resolve_lookup 893. ток = GetAttr (ток, бит)

Файл «D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ дб \ модели \ поля \ files.py "в _get_url 68. self._require_file()

Файл" D: \ virtualEnv \ Lib \ сайт-пакеты \ Джанго \ DB \ модели \ поля \ files.py "в _require_file 46. raise ValueError (" У атрибута% s "нет файла, связанного с ним."% self.field.name)

Тип исключения: ValueError at/ Исключительное значение: атрибут «фото» не имеет связанного с ним файла.

мои взгляды:

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) 

Ursl:

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> 

URL-адреса проекта:

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) 

Почему поле фотографий дает эти ошибки?

ответ

2

Я решил это, используя ответ Stackoverflow, в модели:

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

В шаблоне, используя default_if_none, как по умолчанию URL:

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

Это фактически дает мне правильные ответы после многих поиска и траты много раз.

Надеется, что это будет помогает другим загружать изображения в шаблоне Джанго.

+0

Это не работает: >>> hasattr (а, 'URL') Traceback (самый последний вызов последнего): Файл "", строка 1, в Файл «/ главная/развернуть/бэкенд/.enviroment/Библиотека/python3.5/сайт-пакеты/Джанго/дб/модели/поля/files.py "строка 68, в _get_url self._require_file() Файл" /home/deploy/backend/.enviroment/ Библиотека/python3.5/сайт-пакеты/Джанго/дб/модель/поле/files.py», строка 46, в _require_file поднять ValueError ("The '% S' атрибут не имеет файла, связанный с ним." % себя. field.name) ValueError: атрибут 'avatar' не имеет связанного с ним файла. >>> – alacret

Смежные вопросы