Показать изображения в шаблонах Django
Может кто-нибудь помочь мне в этом вопросе: у меня есть Django porject,
в settings.py
MEDIA_ROOT = 'C:/Users/hl/workspace/beer/media'
MEDIA_URL = '/media/'
STATICFILES_DIRS = (
'C:/Users/hl/workspace/beer/media'
)
и в models.py
image1= models.ImageField(upload_to=settings.MEDIA_ROOT)
и в url.py
(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
в представлениях
def allBeer(request):
beers=Beer.objects.all().order_by("name")
context={'beers': beers}
return render_to_response('AllBeers.html',context,context_instance=RequestContext(request))
и в html
{%for beer in beers %}
<p>
<a href="/beers/{{beer.slug}}/">
<img scr="{{beer.image1.url}}">{{beer}}
</a>
</p>
{% endfor%}
У него нет проблем с загрузкой изображений, но изображения не отображаются в html файле. Я много искал и читал из Интернета, но я все еще не мог понять.
Может ли кто-нибудь сказать мне, почему?
Ответы
Ответ 1
image1= models.ImageField(upload_to=images)
from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from project_name import settings
admin.autodiscover()
urlpatterns = patterns('',
...........
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += staticfiles_urlpatterns()
<img src="{{MEDIA_URL}}{{beer.image1}}">
settings.py
import os
PROJECT_ROOT = os.path.join(os.path.dirname(__file__), '..')
SITE_ROOT = PROJECT_ROOT
MEDIA_ROOT = os.path.join(SITE_ROOT, 'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(SITE_ROOT, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
os.path.join(SITE_ROOT, 'staticfiles'),
)
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
os.path.join(SITE_ROOT, 'templates'),
)
Ответ 2
Вы возитесь с атрибутом src
изображения. Это должно быть просто -
<img src="{{beer.image1.url}}" /> <!-- from the media url -->
Ничего не добавляйте в конце - django знает URL, с которого будет обрабатываться изображение, - то, что делает ImageField на модели.
Я не знаю, что на самом деле с вашим URL-адресом что-то не так, но шаблон, рекомендованный в документах, -
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Ответ 3
расположение ваших изображений имеет важное значение. это должно быть в статической папке, и это должно быть определено в настройках.