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

2024-06-07 07:43:02 发布

您现在位置:Python中文网/ 问答频道 /正文

媒体当前位于本地开发计算机上。

我的媒体根目录、媒体URL、管理媒体前缀和指定如下:

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

没有“管理员”文件夹,但我不认为这会有什么不同。 在urls.py文件中,我有:

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

我不知道该怎么做才能使它工作。 [我正在努力学习django,并且正在与一个非常毛茸茸的现有项目合作]


Tags: pathdjangohttpurlos计算机siteroot
3条回答

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

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

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

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

这将使STATIC_URL变量在模板中可用,因此您可以使用类似{{ STATIC_URL }}css/style.css的内容引用资源

所有静态资源也需要进入一个名为“static”的应用程序级目录。实际的项目根级“静态”目录永远不会直接使用。它只是collectstatic管理命令转储所有静态资源以用于生产的地方。

如果您想要项目范围内的静态资源(不绑定到任何特定的应用程序),则需要一个完全独立的目录(即,与MEDIA_ROOTSTATIC_ROOT不同)。我倾向于使用一种叫做“资产”的方法。然后需要告诉Django在这里查找静态资源以及STATICFILES_DIRS设置:

STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__), 'assets'), # or whatever you named it
)

MEDIA_ROOT/MEDIA_URL现在只用于用户上传(例如,通过FileFieldImageField创建的任何文件,因此您仍然需要它,但您永远不会在那里手动存储任何内容。

当您进入生产阶段时,您的web服务器将需要分别在MEDIA_URLSTATIC_URLMEDIA_ROOTSTATIC_ROOT提供服务。您还需要运行:

$ python manage.py collectstatic

使Django将所有静态文件编译到由STATIC_ROOT指定的目录中。

与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文档声明

not suitable for production use

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

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

通过向url.py添加以下代码:

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

相关问题 更多 >

    热门问题