配置不正确/不允许空的静态前缀- Django

9nvpjoqh  于 2022-12-20  发布在  Go
关注(0)|答案(9)|浏览(186)

我正在用Django上传/显示图片。
网站部署在Heroku上。
遵循this教程,我能够成功上传图像。
但是,图像没有显示在模板中。
然后,我了解到我的urls.py应该在末尾有这一行:

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

我把这个添加到我的www.example.com的末尾urls.py,但现在我得到这个错误:

ImproperlyConfigured at / Empty static prefix not permitted

我的www.example.com中有媒体URL和媒体根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/'

为什么会发生此错误,我该如何修复?
以下是我认为与我的www.example.com相关的部分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)
czq61nw1

czq61nw11#

我在我的www.example.com中添加了相同的行urls.py,并得到了与您相同的错误。

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

文档here说明使用settings.STATIC_URLsettings.STATIC_ROOT
我将其更改为文档版本

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

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

错误就消失了!
我检查了我的设置文件,确保settings.MEDIA_URLsettings.MEDIA_ROOT都定义正确。后来我将www.example.com调整urls.py回使用settings.MEDIA_URLsettings.MEDIA_ROOT。一切都按预期运行。
以下是我的www.example.com文件的相关部分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设置不正确

jc3wubiy

jc3wubiy2#

您还必须检查是否正确定义了MEDIA_URL和MEDIA_ROOT以及静态文件STATIC_ROOT STATIC_URL。
同时检查拼写是否正确:)
如果其中一个配置错误,则会导致此错误。

v1uwarro

v1uwarro3#

要解决此问题,必须将以下语句添加到settings.py文件中:

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, "media")
owfi6suc

owfi6suc4#

确保settings.py具有:

# Media

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

然后在www.example.com中urls.py,试试这个

urlpatterns[
    ...
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)
vd2z7a6w

vd2z7a6w5#

如果您遇到此问题,请确保同时设置了MEDIA_URL和MEDIA_ROOT。
我收到错误

ImproperlyConfigured at / Empty static prefix not permitted

当我在django1.11中只设置了MEDIA_ROOT时
或者,django project wiki说它不能在调试模式下引用URL:https://docs.djangoproject.com/en/1.11/howto/static-files/#serving-files-uploaded-by-a-user-during-development

kd3sttzy

kd3sttzy6#

我正在跟踪Django 2.2 & Python | The Ultimate Web Development Bootcamp,我的问题是我忘记将这些声明到portfolio-project/portfolio/settings.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/'
jogvjijk

jogvjijk7#

我最近在使用Django 2.1时也遇到过同样的错误,问题是我没有在项目设置文件中明确指定MEDIA_URL = '/media/'。一旦我声明了相同的错误,错误就消失了。

9njqaruj

9njqaruj8#

为了修复这个错误,我必须将STATIC_ROOTSTATIC_URL放在STATICFILES_DIRS声明之上。

nbewdwxp

nbewdwxp9#

通过在www.example.com中添加此行来修复此错误urls.py

urlpatterns = [
 ....
]  + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

相关问题