我想在开发应用程序时获取Django的媒体文件。但他们只是没有成立。这是我的设置:
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR
STATICFILES_DIRS = (
STATIC_ROOT + '\\projectpackage\\static\\',
)
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR + '\\projectpackage\\media\\'
Templatetag:
<img class="img-responsive" src="{{ project.image.url }}" alt="">
的url:
urlpatterns = [
url(r'^profile/', include(profile.urls)),
url(r'', include(authentication.urls)),
url(r'^project/', include(project.urls)),
url(r'^admin/', include(admin.site.urls)),
url(r'^', 'views.index', name='index'),
url(r'^markdown/', include('django_bootstrap_markdown.urls')),
]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(STATIC_URL, document_root=STATIC_ROOT)
urlpatterns += static(MEDIA_URL, document_root=MEDIA_ROOT)
我看不出自己的错误,因为我在其他问题上尝试了其他所有建议。一切都很好看。静态文件运行良好,媒体上传到media/prj_img
,但当我尝试在模板上显示图像时,我得到了如此奇怪的结果:
<img class="img-responsive" src="/media/C%3A/Development/projectdirectory/projectpackage/media/prj_img/wallhaven-131_od9FWLX.jpg" alt="">
我该如何修复此媒体错误?这很奇怪,因为一切看起来都很正确。为什么url中有完整路径?
编辑:
BASE_DIR
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
此外,我已经发现我错了upload_to
并将其更改为prj_img
。现在我有以下链接:
<img class="img-responsive" src="/media/prj_img/wallhaven-24700.jpg" alt="">
但它仍然没有取代。
答案 0 :(得分:1)
我对你的代码有很多评论。
STATIC_ROOT
位置不合适。使用您的设置collectstatic
命令将把所有内容放在项目的目录中。像这样改变:
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
但请注意,此文件夹在生产中是可访问的(权限和django-settings)。
使用os.path.join
加入文件夹:
STATICFILES_DIRS = (
os.path.join(STATIC_ROOT, 'projectpackage', 'static')
)
此网址格式必须是最后一个并包含$
:
url(r'^$', views.index, name='index'), # do not pass strings
这两个网址格式相同(docs):
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(STATIC_URL, document_root=STATIC_ROOT)
而且,你不需要它们。请确保INSTALLED_APPS
设置包含'django.contrib.staticfiles'
。