Django无法找到我的媒体文件(在开发服务器上)

时间:2012-02-06 22:18:57

标签: python django django-media

媒体目前在我的本地开发机器上。

我的MEDIA_ROOT,MEDIA_URL,ADMIN_MEDIA_PREFIX并指定如下:

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), "media")
MEDIA_URL = '/media/'
SITE_URL = 'http://localhost:80'
ADMIN_MEDIA_PREFIX = '/media/admin/'

没有'admin'文件夹,但这不应该有所作为我不认为。 在urls.py文件中我有:

(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),

我不知道应该怎样做才能让它发挥作用。 [我正在尝试学习django并且正在使用一个非常毛茸茸的现有项目]

4 个答案:

答案 0 :(得分:7)

您正在混合和匹配Django 1.3之前和之后的静态文件处理。最初所有静态文件都是从MEDIA_URL提供的,但Django 1.3引入了staticfiles contrib包以及相关的STATIC_ROOTSTATIC_URL设置。 django.views.static.serve使用您尚未设置的新静态文件应用。

假设您正在运行Django 1.3,首先,您需要向INSTALLED_APPS添加“staticfiles”。然后,您需要定义STATIC_ROOTSTATIC_URL。标准位置是名为“static”的项目根级别目录。

您还需要添加staticfiles模板上下文处理器:

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.core.context_processors.static',
)

这会使您的模板中的STATIC_URL变量可用,因此您可以使用{{ STATIC_URL }}css/style.css

之类的内容来引用您的资源

所有静态资源也需要进入名为“static”的app(s)-level目录。永远不会直接使用实际的项目根级别“静态”目录。它只是collectstatic管理命令转储所有静态资源以供生产使用的地方。

如果你想要项目范围的静态资源(不依赖于任何一个特定的应用程序),你需要一个完全独立的目录(即与MEDIA_ROOT {{不同的目录1}})。我倾向于使用一个名为“资产”的人。然后,您需要告诉Django在此处查看静态资源以及STATIC_ROOT设置:

STATICFILES_DIRS

STATICFILES_DIRS = ( os.path.join(os.path.dirname(__file__), 'assets'), # or whatever you named it ) / MEDIA_ROOT现在仅用于用户上传(例如,通过MEDIA_URLFileField创建的任何文件,因此您仍然需要它,但是您赢了从来没有手动存储任何东西。

当您进入制作阶段时,您的网络服务器将需要分别在ImageFieldMEDIA_ROOT同时提供STATIC_ROOTMEDIA_URL。你还需要运行:

STATIC_URL

使Django将所有静态文件编译到$ python manage.py collectstatic 指定的目录中。

答案 1 :(得分:6)

适用于django 1.8 - 1.11:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

https://docs.djangoproject.com/en/1.11/howto/static-files/#serving-files-uploaded-by-a-user-during-development

请注意,Django文档声明这是

  

不适合生产使用

(显然除非您使用if settings.DEBUG:部分

答案 2 :(得分:4)

在开发服务器上,此页面可能对您有所帮助。 https://docs.djangoproject.com/en/1.2/howto/static-files/

将以下代码添加到urls.py:

if settings.DEBUG:
    urlpatterns += patterns('', 
        (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/path/to/media'}),
    )

答案 3 :(得分:0)

使用python-django 1.7我使用了

 if settings.DEBUG:
        urlpatterns = patterns('',
            (r'^$', 'blenderx3d.first_step.views.index'),
            (r'^media/(?P<path>.*)$','django.contrib.staticfiles.views.serve'),)