当前位置: 首页 > 面试题库 >

在Django中访问“媒体”文件

袁永贞
2023-03-14
问题内容

我想爱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 settings
if 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


 类似资料:
  • 我最近在Heroku上部署了一个Django应用程序,并上传了一些媒体文件,一切似乎都正常,直到昨天我再次尝试访问该应用程序时,才发现它出现了404错误。 你知道为什么会这样吗? settings.py: URL。py公司

  • 本文向大家介绍django实现后台显示媒体文件,包括了django实现后台显示媒体文件的使用技巧和注意事项,需要的朋友参考一下 1、在全局settings文件中配置 2、 在全局的urls文件中: from MxShop.settings import MEDIA_ROOT #导 入配置文件中的配置 from django.views.static import serve 这样在后台上传媒体文件

  • 我在django站点中使用了storages和django cms应用程序以及azure存储后端。存储效果很好,当我上传文件时,它们会完美地上传到blob容器中。我可以确认文件在那里并且可以公开访问。问题在于django cms显示图像。img src为空,根本不显示图像。我已将MEDIA\u ROOT和MEDIA\u URL都更改为blob存储位置,但仍然没有更改。有什么想法吗?

  • 我刚刚开始android开发,对于如何将媒体文件保存到外部存储的自定义文件夹非常困惑。我读过关于内窥镜存储,纵隔,但我还是不明白。 我正在尝试将文件保存到外部存储中自己的文件夹中(就像外部存储中的Whatsapp文件夹一样)。我希望结构是这样的: 我不希望媒体文件存储在默认媒体目录(如Pictures/或DCIM/)中。我有些问题: 要用哪一个?作用域存储或纵隔API? 如何实现上述操作? 其他信

  • 问题内容: 我是Django(1.4)的新手,我很难理解静态文件,媒体文件和管理文件的原理。该项目的结构从一个教程到另一个教程都是不同的,对于Webfaction(我将在其中托管应用程序)也是如此。我想知道什么是组织它的最佳方式,并且在将它部署到Webfaction时花费最少的精力和编辑,静态媒体和管理文件的意义是什么?先感谢你 问题答案: 本质上,你想在开发中使用django提供静态文件。准备好

  • 问题内容: 我将移至Django 1.3,发现媒体和静态文件的这种分离有点令人困惑。这是默认的样子: 我应该投入和?这些应该是单独的目录吗?有什么不同? 问题答案: 静态文件用于javascript /图像等,而媒体文件用于用户上传的内容。