Изображения из ImageField в Django не загружаются в шаблон
Я создаю галерею, используя Django (1.5.1) на моей локальной машине. В моей модели альбома у меня есть ImageField
. Существует представление, чтобы показать все изображения альбома. Он работает хорошо, но в конце изображения не отображаются. Есть граница изображений, как вы можете видеть, но изображения не загружаются.
скриншот
models.py
class Category(models.Model):
###
class Album(models.Model):
category = models.ForeignKey(Category, related_name='albums')
###
class Image(models.Model):
album = models.ForeignKey(Album)
image = models.ImageField(upload_to = 'images/albums/')
views.py
def detail(request, album_id):
album = get_object_or_404(Album, pk=album_id)
return render(request, 'gallery/detail.html', {'album': album})
деталь.HTML-код
<h1>{{ album.title }}</h1>
{% for image in album.image_set.all %}
<a> <img src="{{ image.image.url }}" height="420"></a>
{% endfor %}
если это мой адрес альбома: http://localhost:8000/gallery/1/
тогда URL изображения:http://localhost:8000/media/images/albums/photo_4.JPG (I get 404 when enter it in browser)
этот корень носителя и url:
MEDIA_ROOT = '/media/'
MEDIA_URL = '/localhost:8000/media/'
мой корневой СМИ разрешение 777.
что мне теперь делать? В чем проблема?
7 ответов
у меня есть ключ к тому, в чем проблема. MEDIA_URL
должно быть так:
MEDIA_ROOT='<the full path to your media folder>' (i.e: '/home/ike/project/media/')
MEDIA_URL='/media/'
обратите внимание на слеш в начале. Это связано с тем, что media-это папка в папке корневого сервера, а не относительно любого другого url-адреса, который вы называете.
и добавить эти строки в конец :
# You might need to import static function like this:
#from django.contrib.staticfiles.urls import static
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
вы можете проверить следующую документацию:https://docs.djangoproject.com/en/dev/howto/static-files
Надежда это помогает
Если вы используете dev-сервер, вам нужно добавить что-то в свой urls.py чтобы заставить django обслуживать медиа-файлы, cf:
1.4.x:https://docs.djangoproject.com/en/1.4/howto/static-files/#serving-other-directories 1.5.x: https://docs.djangoproject.com/en/dev/howto/static-files/#serving-files-uploaded-by-a-user
источник: https://docs.djangoproject.com/en/dev/howto/static-files/#serving-files-uploaded-by-a-user
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
вам нужно добавить в шаблон url для обслуживания загруженных файлов
проверьте свой settings.py у вас есть define MEDIA_ROOT
и 'MEDIA_URL' (и они правильные). MEDIA_ROOT указывает абсолютную папку на вашем компьютере, где будут храниться носители.
вот пример:
MEDIA_ROOT = '/myfolder/'
это означало бы, что он будет искать изображение по адресу:
/myfolder/images/albums/
далее в settings.py проверьте MEDIA_ROOT
расположение: т. е.
MEDIA_URL = 'http://localhost/myfolder/'
так что ваши изображения:
<img src="{{ MEDIA_URL }}{{ image.image.url }}" height="420"></a>
это относится к:
http://localhost/myfolder/images/albums/
надеюсь, что это помогает.
в своем подробности.HTML-код, изменить свой
img src="{{ image.image.url }}" height="420"
до
img src="your_app/media/{{ image.image.url }}" height="420"
надеюсь, это поможет. Если нет, я буду рад предоставить более подробную информацию.
Я взял немного из каждого из ответов выше. У меня были те же проблемы, что и у тебя. Я получал возврат, который направлялся из текущего / блога/поста/(media_url) / изображения.формат JPG
на моем портале администратора я мог легко просмотреть и отредактировать его. Но на моем посту.html у меня были проблемы, пока я не добавил {{ MEDIA_URL }} --
Это все, что мне не хватало.
Я разместил весь свой раздел ниже, чтобы другие люди могли прочитать его и посмотреть, что они отсутствовать.
post.html:
<label for="id_image"> <img src="{{ MEDIA_URL }}{{ p.image.url }}"
title="{{ p.title }}"> </label>
models.py:
from django.core.files.storage import FileSystemStorage
upload_location =
FileSystemStorage(location='/home/pi/djcode/xpcpro/xpcpro/images')
class Blog(models.Model):
title = models.CharField(max_length=255)
author = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
date = models.DateTimeField(auto_now=False, auto_now_add=True)
body = models.TextField()
image = models.ImageField(
storage=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)
urls.py:
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
settings.py:
MEDIA_ROOT = "/home/pi/djcode/xpcpro/xpcpro/images/"
MEDIA_URL = "/images/"
Ну, я знаю, что этот вопрос старый, но я решил его прямо сейчас после того, как докажу все варианты:
- settings.py:
MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
- urls.py опасность!!! Здесь одной из моих ошибок было то, что я использовал my_app/urls.py... если вы хотите использовать my_app/urls.py вам нужно добавить " / namespace_name{{ image.изображение.url }} " img ' src:
from django.conf.urls.static import static from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.conf import settings urlpatterns += staticfiles_urlpatterns() urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
- ваш шаблон, деталь.HTML-код
img src="{{ image.image.url }}" alt="{{ image.title }}"
заметки: Йо не нужно MEDIA_URL, быть осторожнее с изображением"/".изображение.url-адрес является абсолютным, поэтому, если вы используете пространство имен, вам не нужно добавлять косую черту.
img src="/namespace_name/{{ image.image.url }}" --> BAD!!! img src="/namescape_name{{ image.image.url }}" --> GOOD!!!