不允许在/空静态前缀处配置不当 - Django
Posted
技术标签:
【中文标题】不允许在/空静态前缀处配置不当 - Django【英文标题】:ImproperlyConfigured at / Empty static prefix not permitted - Django 【发布时间】:2014-07-15 11:07:10 【问题描述】:我正在使用 Django 上传/显示图像。
网站部署在 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)
【问题讨论】:
...你的MEDIA_URL
和MEDIA_ROOT
是什么?你说它们是定义的;但它们是什么?
我更新了问题。
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
仅用于开发,并且仅适用于将debug
设置为True
。 docs.djangoproject.com/en/dev/howto/static-files/…
【参考方案1】:
我在我的 urls.py 中添加了相同的行并得到了和你一样的错误。
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
文档here 说要使用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
设置不正确
【讨论】:
谢谢,德文!对我来说,这显然是缺少 MEDIA_ROOT 的错。 url 模式仍然可以在方括号内。【参考方案2】:您还必须检查 MEDIA_URL 和 MEDIA_ROOT 以及静态文件 STATIC_ROOT STATIC_URL 是否正确定义。
还要检查正确的拼写:)
如果其中一个未配置,则会导致此错误。
【讨论】:
【参考方案3】:要解决此问题,必须将以下语句添加到 settings.py 文件中:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
【讨论】:
欢迎来到 SO 并感谢您的贡献。如果您添加更具体的解释(例如背景信息、它的作用、为什么它有助于解决给定的问题),它将有助于其他人和 OP 理解您的解决方案。【参考方案4】:确保 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)
【讨论】:
【参考方案5】:以防万一您遇到此问题,请确保您同时设置了 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
【讨论】:
【参考方案6】:我正在关注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/'
【讨论】:
【参考方案7】:我最近在使用 Django 2.1 时遇到了同样的错误问题是我没有在项目设置文件中明确指定 MEDIA_URL = '/media/'
。一旦我声明相同,错误就消失了。
【讨论】:
【参考方案8】:要修复此错误,我必须将 STATIC_ROOT
和 STATIC_URL
放在 STATICFILES_DIRS
声明之上。
【讨论】:
以上是关于不允许在/空静态前缀处配置不当 - Django的主要内容,如果未能解决你的问题,请参考以下文章