Как развернуть медиафайлы в django-heroku? - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь развернуть приложение django на heroku. В настоящее время я использую пакет django-heroku в качестве стандартной настройки. Под моими моделями некоторые медиа-файлы, которые загружаются с использованием ImageField, и я хочу, чтобы они отображались в моих шаблонах. Однако, хотя они, кажется, указывают на правильный пункт назначения, они не обслуживаются.

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

settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")
] 

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

.
.
.

django_heroku.settings(locals())

шаблон

{% extends 'base_site.html' %}
{% load i18n %}
{% block content_title %}{% trans 'Manage Product Detail' %}{% endblock%}
{% block content %}

<div class="card">  
  <div class="carousel-inner" role="listbox">
    {% for figure in product.figures.all %}        
        <div class="item{% if forloop.first %} active{% endif %}">                    
              <img src="{{ figure.image.url }}">
        </div>
    {%endfor%}
  </div>
  <div class="card-body">
    <h5 class="card-title">{{ product.name }}</h5>
    <p class="card-text">{{ product.description }}}
  </div>
  <div class="card-footer">
    <h5 class="card-title">{{ product.name }}</h5>
    <p class="card-text">{{ product.description }}}
  </div>
</div>


{% endblock %}

Хотя я могу подтвердить, что папка мультимедиа, подпапка и изображение существуют (в корне моего проекта) и что объект присутствует в шаблоне, мне все равно сообщают следующую ошибку 404:

Not Found: /media/images/Screenshot_from_2018-12-26_21-07-01.png
[04/Jan/2019 14:32:34] "GET /media/images/Screenshot_from_2018-12-26_21-07-01.png HTTP/1.1" 404 2863

1 Ответ

0 голосов
/ 10 января 2019

Пакет django-heroku не обеспечивал бы эту функциональность "из коробки" (из-за ограничений на стороне heroku невозможно добиться плавного развертывания и разработки медиафайлов). При разработке нужно загружать медиа файлы через:

urlpatterns = [
    ....
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

В производстве статические файлы, как указано выше некоторыми пользователями, должны обслуживаться из внешнего источника. Вот советы, которыми я сейчас следую: https://djangobook.com/serving-files-production/

...