如何管理 Windows 上的媒体文件?
How to manage media files on Windows?
我想在开发应用程序时为 Django 获取媒体文件。但他们就是不成立。这是我的设置:
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR
STATICFILES_DIRS = (
STATIC_ROOT + '\projectpackage\static\',
)
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR + '\projectpackage\media\'
模板标签:
<img class="img-responsive" src="{{ project.image.url }}" alt="">
网址:
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
。现在我得到了以下 link:
<img class="img-responsive" src="/media/prj_img/wallhaven-24700.jpg" alt="">
但它仍然没有消散。
我对你的代码有很多意见。
STATIC_ROOT
位置不合适。使用您的设置 collectstatic
命令会将所有内容放入您的项目目录中。像这样更改它:
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
但请注意,此文件夹在生产环境中是可访问的(包括权限和 django 设置)。
使用os.path.join
加入文件夹:
STATICFILES_DIRS = (
os.path.join(STATIC_ROOT, 'projectpackage', 'static')
)
这个url模式必须是最后一个并且包含$
:
url(r'^$', views.index, name='index'), # do not pass strings
这两个 url 模式的作用相同 (docs):
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(STATIC_URL, document_root=STATIC_ROOT)
而且,你不需要它们。只需确保 INSTALLED_APPS
设置包含 'django.contrib.staticfiles'
.
我想在开发应用程序时为 Django 获取媒体文件。但他们就是不成立。这是我的设置:
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR
STATICFILES_DIRS = (
STATIC_ROOT + '\projectpackage\static\',
)
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR + '\projectpackage\media\'
模板标签:
<img class="img-responsive" src="{{ project.image.url }}" alt="">
网址:
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
。现在我得到了以下 link:
<img class="img-responsive" src="/media/prj_img/wallhaven-24700.jpg" alt="">
但它仍然没有消散。
我对你的代码有很多意见。
STATIC_ROOT
位置不合适。使用您的设置 collectstatic
命令会将所有内容放入您的项目目录中。像这样更改它:
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
但请注意,此文件夹在生产环境中是可访问的(包括权限和 django 设置)。
使用os.path.join
加入文件夹:
STATICFILES_DIRS = (
os.path.join(STATIC_ROOT, 'projectpackage', 'static')
)
这个url模式必须是最后一个并且包含$
:
url(r'^$', views.index, name='index'), # do not pass strings
这两个 url 模式的作用相同 (docs):
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(STATIC_URL, document_root=STATIC_ROOT)
而且,你不需要它们。只需确保 INSTALLED_APPS
设置包含 'django.contrib.staticfiles'
.