Django - 在生产环境中用Apache/Webfaction服务媒体/管理文件

0 投票
1 回答
1005 浏览
提问于 2025-04-18 02:55

目前,我的静态文件可以正常显示,使用的是下面的配置。

在我的settings.py文件中:

MEDIA_ROOT = '/home/chronic88/webapps/media_media/'
MEDIA_URL = '/media/'

STATIC_ROOT = '/home/chronic88/webapps/static_media/'
STATIC_URL = '/static/'

static_mediamedia_media都是通过apache提供服务的应用。

我可以通过管理后台上传文件,它们会出现在media_media文件夹里,但在网页上却无法显示。当我查看网页源代码中的文件路径时,它们看起来是正确的,比如mydomain.com/media/image.png,但是就是不显示。所以,链接是存在的,但似乎在apache和django之间的通信出现了问题,我找不到具体原因。

这是我在生产环境中使用的主要urls.py:

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^', include('polls.urls', namespace="polls")),
    url(r'^admin/', include(admin.site.urls)),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这是我在生产环境中使用的urls.py,运行得很好。我试过去掉最后一行,但结果还是一样(文件上传成功,但无法显示)。

我漏掉了什么呢?

1 个回答

1

如果你把Apache设置成从相应的根文件夹提供静态文件,那么你还需要运行 manage.py collectstatic 这个命令(具体可以查看文档)。

为了测试静态文件和媒体文件,我通常会在我的 urls.py 文件里加上这些内容:

urlpatterns += patterns('',
    (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': True}),
)

撰写回答