web-dev-qa-db-ja.com

正しく設定されていません/空の静的プレフィックスは許可されていません-Django

Djangoで画像をアップロード/表示しています。

WebサイトはHerokuにデプロイされています。

次の this チュートリアル画像を正常にアップロードすることができました。

ただし、画像はテンプレートに表示されていませんでした。

次に、私のurls.pyの最後に次の行が必要であることを学びました。

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

これを私のurls.pyの最後に追加しましたが、次のエラーが発生します。

ImproperlyConfigured at / Empty static prefix not permitted

私のsettings.pyにMEDIA_URLとMEDIA_ROOTがあり、どちらも空ではありません。

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)
16
Daniel Scott

私は私のurls.pyに同じ行を追加し、あなたと同じエラーが発生しました。

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

ドキュメント ここsettings.STATIC_URLsettings.STATIC_ROOTを使用するように言っています

ドキュメント版に変更しました

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

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

そしてエラーは消えました!

設定ファイルをチェックして、settings.MEDIA_URLsettings.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が正しく設定されていないと思います

38
Devin

MEDIA_URLとMEDIA_ROOTの両方、および静的ファイルSTATIC_ROOT STATIC_URLが正しく定義されているかどうかも確認してください。

正しいスペルも確認してください:)

それらの1つが正しく設定されていないと、このエラーが発生します。

4
Projesh Bhoumik

この問題が発生した場合に備えて、MEDIA_URLとMEDIA_ROOTの両方が設定されていることを確認してください。

エラーが発生しました

ImproperlyConfigured at / Empty static prefix not permitted

Django 1.11でMEDIA_ROOTのみを設定した場合

または、DjangoプロジェクトWikiは、デバッグモードではURLを参照できないとしています: https://docs.djangoproject.com/en/1.11/howto/static-files/ #serving-files-uploaded-by-a-user-during-development

2
Mykel

この問題を解決するには、次のステートメントをsettings.pyファイルに追加する必要があります。

MEDIA_URL = '/media/'

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

Settings.pyに以下が含まれていることを確認してください:

# Media

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

次に、urls.pyで、これを試してください

urlpatterns[
    ...
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)
1
Avinash Pandey

私は Django 2.2&Python | The Ultimate Web Development Bootcamp に従っています。私の問題は、これらをポートフォリオプロジェクト/ポートフォリオ/設定.py /に宣言するのを忘れていたことです。下部に:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/Media/'
1
sogu

このエラーを修正するには、STATIC_ROOTおよびSTATIC_URL の上に STATICFILES_DIRS宣言。

0
ehacinom

Django 2.1を使用しているときに最近同じエラーが発生しました。2.1問題は、明示的に指定しなかったMEDIA_URL = '/media/'プロジェクト設定ファイル内。同じことを宣言したら、エラーはなくなりました。

0
TejasPancholi