Как исправить показ изображения через ImageField с модельного объекта? - PullRequest
0 голосов
/ 03 июня 2019

Я создаю веб-сайт для команды по киберспорту, где я хочу, чтобы администраторы имели возможность в backoffice (администратор django) добавлять своих партнеров по сотрудничеству.Модель будет иметь изображение, ссылку и описание.Я знаю, что этот вопрос часто задают, но, поверьте мне, я искал и пытался часами, должна быть какая-то небольшая проблема, которая мешала мне.

Я могу заставить все объекты показывать, работаяссылки и описания, но изображение не будет отображаться.Вчера я сидел весь день, пытаясь что-то исправить.

Я пытался изменить MEDIA_ROOT и MEDIA_URL, а также использовать разные стратегии, которые я нашел в Интернете и здесь, в StackOverflow.Но я не могу заставить его работать.

# My model (models.py)
class Partner(models.Model):
    """ Adds a partner with specific information """
    ...
    partner_image = models.ImageField(upload_to='partners/', blank=True, null=True)
# Urls (urls.py)
from django.urls import path
from django.conf import settings
from django.contrib.staticfiles.urls import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from . import views

urlpatterns = [
    path('', views.index, name='index'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += staticfiles_urlpatterns()
# Appropriate settings (settings.py)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
# Pages (views.py)
def index(request):
    """ Home """
    news_list = Article.objects.filter(status='p') # only show published news
    about_page = About.objects.filter()[:1].get()
    partners = Partner.objects.all()

    return render(request, 'SVEC/index.html', {'news_list': news_list, 'about_page': about_page, 'partners': partners})
# My template (partners.html, a section within my index.html)
{% for partner in partners %}
            <div class="col-md-3 col-sm-6">
                <a href="{{ partner.website }}">
                    <img class="img-fluid d-block mx-auto img-opacity text-just" src="{{ partner.partner_image.url }}" alt=" " data-content="{{ partner.information }}" rel='popover' data-placement='bottom' data-original-title='{{ partner.name }}' data-trigger='hover'>
                </a>
            </div>
{% endfor %}

При проверке элемента в моем веб-браузере ожидаемым результатом является показ каждого изображения вместе с ним.с их описанием (при наведении) и возможностью перейти на веб-сайт, нажав.

Это то, что показывает при проверке, но по-прежнему нет изображения.Есть ли какая-то проблема в том, как статические файлы и медиа-файлы работают по-разному в том, как они находят правильный путь?

src="/media/partners/msi.png"

ОБНОВЛЕНИЕ:

Это то, что говорит мой cmd, чтобы сравнить медиа-файлы со статическими файлами:

[03/Jun/2019 12:27:23] "GET /media/partners/msi.png HTTP/1.1" 404 2117
[03/Jun/2019 12:27:23] "GET /static/img/portfolio/01-full.jpg HTTP/1.1" 200 52848

Я знаю, что Django распознает путь для статических файлов, может быть что-то другое в отношении медиа-файлов?

...