Django静态文件未在生产中加载

问题描述 投票:0回答:2

我已经使用Django一段时间了,但是对于将网站投入生产来说,我是一个新手。 不幸的是,我使用的是非Django友好的托管服务(HostGator),并使用FastCGI和此处的教程设置了Django。 Django版本是1.3 ... :(

该站点已启动,但是由于某些原因,静态文件无法加载。 调试输出显示正在my_domain / static /查找文件,我不确定这是正确的。

我无权编辑任何服务器配置或任何内容,因此我只能通过Django代码解决此问题。 感谢您的帮助。 (代码将跟随)

settings.py

MEDIA_ROOT = "/home2/mlinsenb/django/projects/website/media"

MEDIA_URL = '/media/'

STATIC_ROOT = "/home2/mlinsenb/django/projects/website/static"

STATIC_URL = "/static/"

STATICFILES_DIRS = ()

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
#'django.template.loaders.eggs.Loader',
)

TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
)

urls.py

from django.conf.urls.defaults import patterns, include, url
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('homepage.views',
url(r'^$', 'home'),
url(r'^blog/$', 'blog'),
url(r'^programming/$', 'programming'),
url(r'^music/$', 'music'),
url(r'^about/$', 'about'),
url(r'^contact/$', 'contact'),

# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

# Uncomment the next line to enable the admin:
# url(r'^admin/', include(admin.site.urls)),
)

urlpatterns += staticfiles_urlpatterns()

home.html的

{% extends "homepage/base.html" %}
{% block content %}
<h1>Hi, I'm Max.</h1>
<img src="{{ STATIC_URL }}img/me.jpg" alt="Serious business" height="300px" width="300px">
{% endblock %}
python django fastcgi
2个回答
1
投票

staticfiles_urlpatterns()不是为生产设计的,仅在DEBUG = True 。 您需要分别提供静态文件。 我从未将django与fcgi一起使用,但我假设您可以相对轻松地实现这一目标。

yourdomain.com/static中查找文件,因为这是您为STATIC_URL设置的

首先,将您的STATIC_ROOT更改为公共目录。 您应该将/home2/mlinsenb/public_html内容放置在index.fcgi文件中。 在此处创建static目录,然后更改您的STATIC_ROOT = "/home2/mlinsenb/public_html/static"

您也可能希望对MEDIA_ROOT进行相同的操作, MEDIA_ROOT将来使用。

如果您遵循发布的指南,则您的.htaccess应如下所示:

AddHandler fcgid-script .fcgi
Options +FollowSymLinks
RewriteEngine On

RewriteRule (media/.*)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(admin/.*)$ index.fcgi/$1 [L]

再说一次,我不是mod_rewrite的专家,但是看起来他们用它来处理媒体文件,所以我会尝试为您的静态文件添加一行:

AddHandler fcgid-script .fcgi
Options +FollowSymLinks
RewriteEngine On

RewriteRule (media/.*)$ - [L]
RewriteRule (static/.*)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(admin/.*)$ index.fcgi/$1 [L]

然后运行python manage.py collectstatic和django应该将所有静态文件放在/home2/mlinsenb/public_html/static

现在hostgator应该从该目录提供服务到yourdomain.com/static。


0
投票

Heroku等建议仅让Django使用WSGI插件来提供静态文件。 他们曾经推荐dj-static ,现在推荐whitenoise

© www.soinside.com 2019 - 2024. All rights reserved.