如何管理 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'.