6

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

我的 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/'

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

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

我不知道该怎么做才能让它工作。[我正在尝试学习 django,并且正在处理一个非常复杂的现有项目]

4

4 回答 4

7

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

假设您正在运行 Django 1.3,首先,您需要将“静态文件”添加到您的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_ROOT or STATIC_ROOT不同)。我倾向于使用一个名为“资产”的东西。然后,您需要告诉 Django 在此处查找静态资源以及STATICFILES_DIRS设置:

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

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

当您进入生产阶段时,您的网络服务器将需要分别为MEDIA_ROOTSTATIC_ROOTatMEDIA_URL和提供服务STATIC_URL。您还需要运行:

$ python manage.py collectstatic

让 Django 将所有静态文件编译到STATIC_ROOT.

于 2012-02-06T22:38:32.957 回答
7

适用于 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:part

于 2015-12-09T17:29:32.847 回答
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'}),
    )
于 2012-02-07T02:54:36.020 回答
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'),)
于 2015-03-15T23:32:19.597 回答