在 / 出现 ImproperlyConfigured - Django 不允许空静态前缀
我正在用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 个回答
如果你遇到这个问题,确保你同时设置了 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确保你的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)
要解决这个问题,需要在settings.py文件中添加以下内容:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
你需要检查一下 MEDIA_URL 和 MEDIA_ROOT,另外静态文件的 STATIC_ROOT 和 STATIC_URL 也要确认设置正确。
记得检查拼写哦 :)
如果其中有一个配置错了,就会导致这个错误出现。
我在我的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
的设置有问题。