在 / 出现 ImproperlyConfigured - Django 不允许空静态前缀

29 投票
9 回答
35762 浏览
提问于 2025-04-18 07:37

我正在用Django上传和显示图片。

这个网站是部署在Heroku上的。

按照这个教程,我成功地上传了图片。

不过,图片在模板中没有显示出来。

后来我了解到,我的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)

9 个回答

2

如果你遇到这个问题,确保你同时设置了 MEDIA_URL 和 MEDIA_ROOT。

我在使用 Django 1.11 时,只设置了 MEDIA_ROOT,结果收到了这个错误:

ImproperlyConfigured at / Empty static prefix not permitted

另外,Django 项目的维基上说,在调试模式下,它不能引用一个 URL:

https://docs.djangoproject.com/en/1.11/howto/static-files/#serving-files-uploaded-by-a-user-during-development

3

确保你的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)
4

要解决这个问题,需要在settings.py文件中添加以下内容:

MEDIA_URL = '/media/'

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

你需要检查一下 MEDIA_URL 和 MEDIA_ROOT,另外静态文件的 STATIC_ROOT 和 STATIC_URL 也要确认设置正确。

记得检查拼写哦 :)

如果其中有一个配置错了,就会导致这个错误出现。

57

我在我的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_URLsettings.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的设置有问题。

撰写回答