Django, обслуживающий мультимедийные файлы (загруженные пользователем файлы) в режиме спуска

Я успешно развернул проект Django в openshift. Но я должен иметь возможность обслуживать файлы, которые загружаются пользователями. Для этого я пользуюсь MEDIA_ROOT и MEDIA_URL. Я последовал этому руководству, но ничего не произошло. Я должен был изменить MEDIA_ROOT, потому что предлагаемый там не правильный, я думаю. Так выглядит MEDIA_ROOT

MEDIA_ROOT = os.path.join(os.environ.get('OPENSHIFT_DATA_DIR', ''),'media') MEDIA_URL = '/media/' 

Я добавил папку .htaccess в / wsgi, как сказано в статье.

 RewriteEngine On RewriteRule ^application/media/(.+)$ /static/$1 [L] 

и создал сценарий сборки, чтобы сделать символическую ссылку на медиа в статике, как говорится в статье.

 #!/bin/bash if [ ! -d $OPENSHIFT_DATA_DIR/media ]; then mkdir $OPENSHIFT_DATA_DIR/media fi ln -sf $OPENSHIFT_DATA_DIR/media $OPENSHIFT_REPO_DIR/wsgi/static/media 

В моем urls.py я добавил

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

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

В другом учебнике .htacces помещается внутри статической папки. Я делаю что-то неправильно?

  • запроса соответствия не существует Ошибка в Django
  • Обозначение Shebang: скрипты Python для Windows и Linux?
  • Ошибка Python Pysftp
  • Django: как переопределить сообщение об ошибке unique_together?
  • Какие библиотеки клиентов SOAP существуют для Python и где для них имеется документация?
  • Псевдокод оценки максимального правдоподобия
  • Получите субдомен от URL-адреса с помощью Python
  • Есть ли способ скопировать только структуру (а не данные) Pandas DataFrame?
  • 3 Solutions collect form web for “Django, обслуживающий мультимедийные файлы (загруженные пользователем файлы) в режиме спуска”

    Просто для других, чтобы узнать, я решил свою проблему, исправив RewriteRule, добавив медиа-папку во вторую часть правила, поэтому он стал

     RewriteEngine On RewriteRule ^application/media/(.+)$ /static/media/$1 [L] 

    Надеюсь, это поможет другим.

    Проблема заключается в вашем медиа-адресе. Симлинковая ссылка создается в wsgi / static / media, тогда ваша MEDIA_URL нужна MEDIA_URL = '/ static / media /'

    Первый шаг, в скрипте сборки .openshift / action_hooks / build:

     if [ ! -d $OPENSHIFT_DATA_DIR/media ]; then mkdir $OPENSHIFT_DATA_DIR/media fi ln -sf $OPENSHIFT_DATA_DIR/media $OPENSHIFT_REPO_DIR/wsgi/static/media 

    Второй шаг: в ваших настройках:

     MEDIA_URL = '/static/media/' if ON_PAAS: MEDIA_ROOT = os.path.join(os.environ.get('OPENSHIFT_DATA_DIR'), 'media') else: MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

    У меня была та же проблема, но решение Apostolos выше не решило проблему: когда я пытаюсь получить доступ к http://<domain>/media/<file> он все равно не работает.

    Однако это работает по-другому. если я попытаюсь получить доступ к тому же файлу, как если бы он был статичным, используя http://<domain>/static/media/<file> тогда он работает. Это происходит даже без использования обходного решения Gpzim98. Я думаю, причина в том, что медиа-файлы теперь доступны через символическую ссылку. Другими словами, мультимедийные файлы не обслуживаются, но теперь вы можете притворяться, что они являются статическими файлами.

    Было бы очень интересно понять, что происходит и как решить эту проблему полностью (если это можно сделать) и иметь возможность обслуживать медиафайлы напрямую через MEDIA_URL.

    благодаря

    Python - лучший язык программирования в мире.