Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问;“媒体”;Django中的文件_Django - Fatal编程技术网

访问;“媒体”;Django中的文件

访问;“媒体”;Django中的文件,django,Django,我很喜欢Django,但开发环境中的静态和媒体文件业务让我发疯。请把我从愚蠢中解救出来 我在我的开发机器上。我的项目目录的根目录中有文件夹媒体 在settings.py中,我有:MEDIA\u ROOT='和MEDIA\u URL='/MEDIA/' 在url.py中,我有: if settings.DEBUG: urlpatterns += patterns('', url(r'^media/(?P<path>.*)$', 'djan

我很喜欢Django,但开发环境中的静态和媒体文件业务让我发疯。请把我从愚蠢中解救出来

我在我的开发机器上。我的项目目录的根目录中有文件夹
媒体

settings.py
中,我有:
MEDIA\u ROOT='
MEDIA\u URL='/MEDIA/'

url.py
中,我有:

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$',
            'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT, }),
    )
if settings.DEBUG:
urlpatterns+=模式(“”,
url(r'^media/(?P.*)$”,
'django.views.static.service',
{'document_root':settings.MEDIA_root,}),
)
但获取媒体文件的唯一方法是引用
/media/media/
,例如。

我期待(并且想要)

有谁能告诉我这里发生了什么,并给我一个设置媒体文件处理的简单方法吗

多谢各位


@蒂米·奥马奥尼-谢谢!史诗般的帖子,非常清晰。但它留下了几个问题:

(1) 我必须使用
/media/
/static/
,而不是
media/
static/
作为
媒体URL
静态URL
-我遗漏了什么吗

(2) 如果
collectstatic
软管
/static/
,您将站点级CSS(例如站点的CSS文件)放在何处?显然,不在
/static/


(3) 我把它们放在项目根目录下的一个目录“u”中,并设置
STATICFILES\u DIRS
指向它——这似乎是开发服务器获取其静态文件的地方,尽管有
urlpatterns
指令。如果这是错误的,那么在开发过程中,您将站点级CSS放在何处?当您修改它们时,围绕
collectstatic
的工作流程是什么?您是否必须在一个地方编辑它们,并在每次编辑后在其他地方收集它们

为什么将
媒体根目录设置为空?它必须是媒体目录的路径。正如您所说,您的媒体位于名为
media
的子目录中,因此您应该将其放入
media\u ROOT

文件夹设置:

您的项目根目录应该类似于:

/app1
/app2
/media
/static
/templates
urls.py
settings.py
manage.py
MEDIA_ROOT = "/User/Bob/Sites/MySite/Project_root/media/"
媒体文件夹应包含在网站正常使用期间(即开发完成后)可能上传的图像、下载和其他材料

静态文件夹应该包含所有CSS/JS和作为网站开发一部分的其他材料


设置。py:

MEDIA\u ROOT是指向上述静态文件夹的绝对服务器路径。这意味着它应该是这样的:

/app1
/app2
/media
/static
/templates
urls.py
settings.py
manage.py
MEDIA_ROOT = "/User/Bob/Sites/MySite/Project_root/media/"
MEDIA\u URL是您在查看网站时应该从中访问媒体文件的相对浏览器URL。应该是(通常是)

这意味着所有材料都可以在

类似地,STATIC\u ROOT应该是

STATIC_ROOT = "/User/Bob/Sites/MySite/Project_root/static/"
静态URLbe

STATIC_URL = "static/" 

为文件提供服务:

既然您已经告诉django这些文件夹应该在哪里,以及访问它们的正确URL,那么您需要正确地处理对文件夹的所有请求

通常,在生产环境中,您希望Web服务器负责为静态文件和媒体文件提供服务

但是,如果您正在开发,您可以让django开发服务器为您提供服务

要做到这一点,您告诉它将所有传入到媒体根目录的请求和所有传入到静态根目录的请求路由

要执行此操作,请将一些URL添加到URL.py,如下所示:

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,
        }),
)
现在,您的Web服务器/开发服务器只在您要求它查看的地方查找静态文件(即根静态文件夹),因此您需要收集子文件夹中的所有文件并将它们复制到根静态文件夹。您可以手动完成此操作,但django提供了一个命令来完成此操作(这是静态应用程序的全部要点)


我按照timmy的过程进行操作,但出现了一个错误,没有模块名
django.views
。当我在我的virtualenv中使用import django.views时,一切正常,即导入库时没有问题

然而,我能够通过在我的主URL文件中遵循这个过程来解决这个问题

from django.conf.urls.static import  static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

设置.py中,确保添加

django.core.context_processors.media


在您的模板\u上下文\u处理器中。否则,当您在模板中使用介质\u根目录时,它将无法工作。

我使用的是Django 1.10。我的媒体文件夹是“上传” 这是my settings.py中的配置:

MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
MEDIA_URL = '/uploads/'
在模板中,我将媒体URL的名称放在de object.name之前,而不是object.URL,如下所示:

    <img src="uploads/{{ imagen_identificativa.name }} " alt="{{imagen_identificativa}}">
<img src="{{ person.photo.url}} />
src ={{ object.field.url}}

这对我很有用。
我希望这能有所帮助。

我也有同样的问题,所以我添加了这些行

from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    url(r'', include('blog.urls')),
    url(r'^admin/', admin.site.urls),
    url(r'^cadmin/', include('cadmin.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

在Django项目配置目录中的
urls.py
。更多信息:

这里是另一种选择:

设置您的媒体在“settings.py”中配置如下内容:

#Set media path
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'
假设我有一个名为person的模态,图像归档如下:

class Person(models.Model):
    name = models.CharField(max_length = 30)
    photo = models.ImageField(upload_to = 'photos')
现在这里上传到我们正在采取的路径是在媒体根文件夹。在我的情况下,将创建一个媒体文件夹,其中的照片文件夹将被创建,我们这里的媒体将被转储

现在在我的模板中,我做了如下操作:

    <img src="uploads/{{ imagen_identificativa.name }} " alt="{{imagen_identificativa}}">
<img src="{{ person.photo.url}} />
src ={{ object.field.url}}

希望有帮助!快乐编码

对于Django版本3,我使用了以下内容:

from django.conf import settings
from django.urls import re_path
from django.views.static import serve

# ... the rest of your URLconf goes here ...

if settings.DEBUG:
    urlpatterns += [
        re_path(r'^media/(?P<path>.*)$', serve, {
            'document_root': settings.MEDIA_ROOT,
        }),
    ]
这里有一个文档链接
如果您将Django REST与某些开发服务器一起使用,请不要忘记更新您的开发代理设置,将
/media
重定向到Django后端

,具体来说,应该是
media\u ROOT=“media/”
我更喜欢使用绝对路径来避免问题。我在设置中为此使用了一个小包装器。py:
import os.path