在Django中访问“媒体”文件
我想爱Django,但是开发环境中的静态文件和媒体文件业务让我发疯。请把我从愚蠢中解救出来。
我在开发机器上。media
我的项目目录的根目录中有文件夹。
在settings.py我有:MEDIA_ROOT = ''
和MEDIA_URL = '/media/'
。
在urls.py
我有:
if settings.DEBUG: urlpatterns += patterns('',
url(r'^media/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT, }),
)
但是我获取媒体文件的唯一方法是通过引用/media/media/例如 。
我期望(并且想要)
<img src="/media/image.png" />
谁能告诉我这里发生了什么,并给我一个设置媒体文件处理的简单方法吗?
非常感谢你。
但这留下了两个问题:
(1)我必须用/media/
和/static/
,不media/
和static/
的MEDIA_URL和与STATIC_URL-我这么想吗?
(2)如果是collectstatic
软管/static/
,你将站点级CSS放置在哪里,例如站点的CSS文件?/static/
显然不在。
(3)我将它们放在项目根目录下的目录“ _”中并STATICFILES_DIRS
指向它-这似乎是开发服务器获取其静态文件的位置,尽管有该urlpatterns
指令。如果那是错误的,那么在开发期间你将站点级CSS放在哪里,以及collectstatic
在修改它们时的工作流程是什么-你是否必须在一个位置进行编辑,并在每次编辑后将其收集在其他位置?
回答:
文件夹设置:
你的项目根目录应类似于:
/app1/app2
/media
/static
/templates
urls.py
settings.py
manage.py
该媒体文件夹应该像图片,下载等材料装东西,可能正常使用本网站的过程中被上传(开发完成后,即)
将静态文件夹应该容纳所有的CSS / JS等材料是网站发展的一个组成部分
Settings.py:
MEDIA_ROOT是上述静态文件夹的绝对服务器路径。这意味着应该是这样的:
MEDIA_ROOT = "/User/Bob/Sites/MySite/Project_root/media/"
MEDIA_URL是当你查看站点时应从中访问媒体文件的相对浏览器URL。它应该(通常)
MEDIA_URL = "media/"
这意味着可以在http://example.com/media/上查看所有资料
同样,STATIC_ROOT应该类似于
STATIC_ROOT = "/User/Bob/Sites/MySite/Project_root/static/"
和STATIC_URL为
STATIC_URL = "static/"
提供文件:
既然你已经告诉django这些文件夹应该在哪里,以及正确的URL来访问它们,你就需要正确地向文件夹提供所有请求。
通常,在生产时,你希望Web服务器照顾服务静态文件和媒体文件。
如果你正在开发,则只需获取django开发服务器即可为你提供服务。
要做到这一点,你告诉它路由进来的所有请求http://example.com/media你MEDIA_ROOT和进来的所有请求http://example.com/static你STATIC_ROOT。
为此,你可以像下面这样向URLS.py添加一些URL:
from django.conf import settingsif settings.DEBUG:
urlpatterns += patterns('',
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
}),
url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.STATIC_ROOT,
}),
)
额外:
如果你有多个应用程序,每个应用程序都有自己的CSS和JS文件,则可能不希望将它们放在一个/ static /文件夹中。将它们放在它们所属的应用程序的子文件夹中可能会很有用:
/app1/static/ # Specific static folder/app2/static/
/media/
/static/ # Root static folder
现在,你的Web服务器/开发服务器仅在你要查找的静态文件(即静态根目录)中查找,因此你需要收集子文件夹中的所有文件并将其复制到静态根目录中。你可以手动执行此操作,但是django提供了一个命令为你执行此操作(这是静态应用程序的重点)
./manage collectstatic
以上是 在Django中访问“媒体”文件 的全部内容, 来源链接: utcz.com/qa/423942.html