it-swarm.com.ru

Неправильно настроен на / пустой статический префикс не разрешен - Django

Я работаю над загрузкой/отображением изображений с Django.

Сайт размещен на Heroku.

Следуя это учебник, я смог успешно загрузить изображения.

Однако изображения не отображались в шаблоне.

Затем я узнал, что мой urls.py должен иметь эту строку в конце:

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

Я добавил это в конец моего urls.py, но теперь я получаю эту ошибку:

ImproperlyConfigured at / Empty static prefix not permitted

У меня есть MEDIA_URL и MEDIA_ROOT в моем settings.py, и ни один из них не пуст.

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

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

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/"
MEDIA_URL = '/media/'

Почему происходит эта ошибка и как я могу это исправить?

Вот то, что я считаю соответствующей частью моего urls.py:

from Django.contrib import admin
from Django.conf import settings
from Django.conf.urls.static import static
import notifications
admin.autodiscover()

urlpatterns = patterns('',
    ....urls......

) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
7
Daniel Scott

Я добавил ту же строку в мой urls.py и получил ту же ошибку, что и вы.

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

В документации здесь сказано использовать settings.STATIC_URL и settings.STATIC_ROOT

Я изменил его на версию документации

urlpatterns = patterns('',
    ....urls......

) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

и ошибка ушла!

Я проверил свой файл настроек и убедился, что settings.MEDIA_URL и settings.MEDIA_ROOT были определены правильно. Позже я снова настроил urls.py на использование settings.MEDIA_URL и settings.MEDIA_ROOT. Все работало как положено.

Это соответствующие части моего файла settings.py:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
REPOSITORY_ROOT = os.path.dirname(BASE_DIR)

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(REPOSITORY_ROOT, 'static/')

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

Я думаю, что MEDIA_URL был установлен неправильно

26
Devin

Вы также должны проверить как MEDIA_URL и MEDIA_ROOT, так и статические файлы STATIC_ROOT STATIC_URL определены правильно.

Проверьте правильность написания также :)

Если один из них пропущен, это вызовет эту ошибку.

2
Projesh Bhoumik

На случай, если у вас возникнет эта проблема, убедитесь, что установлены оба параметра MEDIA_URL и MEDIA_ROOT.

Я получаю ошибку

ImproperlyConfigured at / Empty static prefix not permitted

когда в Django 1.11 был установлен только MEDIA_ROOT

В качестве альтернативы, вики-проект Django говорит, что не может ссылаться на URL в режиме отладки: https://docs.djangoproject.com/en/1.11/howto/static-files/#serving- файлы загруженные-на-а-пользователь-во-разработки

1
Mykel

Чтобы решить эту проблему, в файл settings.py необходимо добавить следующие операторы:

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, "media")
1
Antonio José

Чтобы исправить эту ошибку, мне пришлось поместить STATIC_ROOT и STATIC_URL выше объявления STATICFILES_DIRS.

0
ehacinom

Недавно я получил ту же ошибку при работе с Django 2.1. Проблема была в том, что я не указал явно MEDIA_URL = '/media/' в файле настроек проекта. Как только я объявил то же самое, ошибка ушла.

0
TejasPancholi