Пути к изображениям в представлении Django относятся к каталогу, а не к MEDIA_URL.

Я боролся с этой проблемой в течение нескольких дней и не мог решить ее самостоятельно. Я работаю над сайтом-блогом. Представление публикации отображается по URL, например:

domain.com/blog/specificpost/

В моей модели есть ImageField. Изображения загружаются правильно, и я могу обращаться к изображениям по правильным URL-адресам.

domain.com/media/asset.jpg

В моем settings.py я определил пути мультимедиа. Когда я получаю доступ к файлам изображений от администратора, они работают правильно.

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

При рендеринге вида поста путь к изображению в DOM отображается неправильно. Это:

domain.com/blog/media/asset.jpg

Должен быть:

domain.com/media/asset.jpg

В моем urlpattern я добавил:

+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

и добавил соответствующий импорт в urls.py. Я считаю, что этот код должен обслуживать файлы в корне домена во время разработка.

Я перепробовал все решения здесь, но URL-адреса изображений по-прежнему отображаются относительно каталог. Любая помощь, чтобы установить меня на правильном пути, будет полезна, большое спасибо.

Шаблон сообщения:

{% extends "base.html" %}

{% block journal_entry %}
    <main class="content">
        <section class="photo">
            <img src="{{ object.image }}">
        </section>
        <section class="entry">
            <section class="entry-content">
                {{ object.body|linebreaks }}
            </section>
            <section class="entry-meta">
                {{ object.created }}<span class="user-options"> • <a href="#">Delete</a></span>
            </section>
        </section>
    </main>
{% endblock %}

person Charlie Deets    schedule 13.11.2017    source источник
comment
Можете ли вы добавить шаблон вашего представления?   -  person MrName    schedule 14.11.2017
comment
@MrName Добавлено, спасибо.   -  person Charlie Deets    schedule 14.11.2017


Ответы (1)


Попробуйте использовать {{ object.image.url }} вместо {{ object.image }} в своем шаблоне.

person MrName    schedule 14.11.2017
comment
Это сработало отлично. Не понимал, что вам нужно быть конкретным с выводом ImageField. Я знал, что это будет простая ошибка, просто не мог понять, чего мне не хватало. Я ценю помощь, большое спасибо. - person Charlie Deets; 14.11.2017
comment
Не беспокойтесь, я думаю, что когда вы ссылаетесь на само поле (вместо атрибута URL), происходит то, что оно использует метод класса __str__, который является относительным URI, в отличие от поля url, которое является полным URL. - person MrName; 14.11.2017