Как вывести изображение в шаблон Django?

Уже запарился, новичок в Django, каким образом вывести изображение в шаблон? Есть схожий вопрос на тостере, но к сожалению не помогло
Может мне кто нибудь например показать каким образом переменная из модели(например caption) перемещается в шаблон. В документации был уже

settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

MEDIA_URL = '/media/'


models.py
class Slide(models.Model):
    image = models.ImageField(u'Изображение')
    header = models.CharField(u'Заголовок', max_length=120, blank=False)
    caption = models.CharField(u'Описание', max_length=250, blank=False)


urls.py
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$',  'slides.views.slides', name='home'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


Вот если честно, views.py еще не умею писать
views.py
from .models import Slide

def slider(request):
    slides = Slide.objects.all()
    return render(request, 'main.html')


main.html
<div class="item lifted">
    <img class="lazyOwl" data-src="{{ slide.image.url }}">
    <div class="caption-content">
        <h1 class="caption lifted">{{ slide.header }} </h1><br>
        <p class="caption2 lifted">{{ slide.caption }}</p>
    </div>
</div>
  • Вопрос задан
  • 3341 просмотр
Решения вопроса 1
@marazmiki
Укротитель питонов
Добавьте в контекст шаблона список слайдов:
# views.py
def slider(request):
    slides = Slide.objects.all()
    return render(request, 'main.html', {'slides': slides})
а в шаблоне обращайтесь к каждому из слайдов списка
{# main.html #}
{% for slide in slides %}
<div class="item lifted">
    <img class="lazyOwl" data-src="{{ slide.image.url }}">
    <div class="caption-content">
        <h1 class="caption lifted">{{ slide.header }} </h1><br>
        <p class="caption2 lifted">{{ slide.caption }}</p>
    </div>
</div>
{% endfor %}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Запускаете я так понял на дев сервере (manage.py runserver)?
Если так, то веб сервер джанго не умеет сам отдавать медиа файлы.

Можете попробовать в urls.py прописать следующее:
if settings.DEBUG:
    urlpatterns += patterns(
        'django.views.static',
        (r'media/(?P<path>.*)',
        'serve',
        {'document_root': settings.MEDIA_ROOT}), )


www.tangowithdjango.com/book/chapters/templates_st...

UPDATE:
И view перепишите
from .models import Slide

def slider(request):
    slides = Slide.objects.all()
    return render(request, 'main.html', locals())


Во вью вы не передаёте объекты в темплейт, либо в словарь заключать (context = {"slides": slides} и в рендере добавлять context, либо в рендере передать locals())
Ответ написан
Комментировать
sim3x
@sim3x
https://docs.djangoproject.com/en/1.8/topics/http/...
views.py
from .models import Slide

def slider(request):
    context = {'slides': Slide.objects.all()}
    return render(
request, 
'main.html',
# context???
context
)


main.html
{% for slide in slides %}
<div class="item lifted">
    <img class="lazyOwl" data-src="{{ slide.image.url }}">
    <div class="caption-content">
        <h1 class="caption lifted">{{ slide.header }} </h1><br>
        <p class="caption2 lifted">{{ slide.caption }}</p>
    </div>
</div>
{%endfor%}


не используй шорткаты без понимания, что за ними стоит

Начни с https://docs.djangoproject.com/en/1.8/ref/request-...
Ответ написан
Комментировать
zelsky
@zelsky
Имейдж фил также имеет доступ по урл к файлу в папке медиа.
{slide.image.url}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы