2017-01-16 16 views
0

Надеюсь, вы можете помочь мне с проектом Django. Я могу загружать изображения в папку media_cdn внутри папки, основанной на имени пули. Проблема возникает, когда я пытаюсь отобразить изображение внутри своего списка сообщений и сообщения.Невозможно отобразить ImageField в шаблоне Django

Можете ли вы просмотреть мой код и предложить решение. Я часами пытался заставить его работать. Пожалуйста помоги.

settings.py

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(BASE_DIR, 'static/') 

MEDIA_URL = "/media/" 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_cdn/') 

models.py

def upload_location(instance, filename): 
    return "%s/%s" %(instance.slug, filename) 

class Post(models.Model): 
    category = models.ForeignKey(Category) 
    title = models.CharField(max_length=250) 
    slug = models.SlugField(max_length=250, unique=True) 
    image = models.ImageField(upload_to=upload_location, 
      null=True, 
      blank=True, 
      width_field="width_field", 
      height_field="height_field") 
    height_field = models.IntegerField(default=0) 
    width_field = models.IntegerField(default=0) 
    body = models.TextField() 
    date = models.DateTimeField() 
    updated = models.DateTimeField(auto_now=True) 

postlist.html

{% block content %} 
    {% for post in posts %} 
     <div class="container w3-card-4"> 
     {% if post.image %} 
      <img src="{{ post.instance.image.url }}"> 
     {% endif %} 
... 

post.html

{% block content %} 
<div class="row"> 
    <div class="container w3-card-4"> 
     {% if instance.image %} 
     <img src= "{{ instance.image.url }}" class="img-responsive"> 
     {% endif %} 
... 

url.py

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

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^', include('personal.urls')), 
    url(r'^blog/', include('blog.urls', namespace='blog', app_name='blog')), 
] 

if settings.DEBUG: 
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

Я не знаю, что еще попытаться вызвать этот образ из папки. Любые советы будут очень признательны. Спасибо!

+0

вы проверяете 'if post.image', а затем' post.instance.image.url'? – dnit13

+0

post.image решена моя проблема. Спасибо огромное! – IoanCosmin

ответ

1

Использовать post.image.url вместо post.instance.image.url. Проверьте documentation.

ImageField наследует все атрибуты FileField, который включает в себя url.

+1

Эй, АКС, большое вам спасибо, это решило мою проблему. По какой-то причине я думал, что я уже пробовал это, но по какой-то причине это не сработало в первый раз. Вы спасли меня много времени. Хорошего дня! – IoanCosmin