Изображения из ImageField в Django не загружаются в шаблон

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

скриншот

enter image description here

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/"

Ну, я знаю, что этот вопрос старый, но я решил его прямо сейчас после того, как докажу все варианты:

  1. settings.py:
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  1. 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)
  1. ваш шаблон, деталь.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!!!