2014-10-07 93 views
0

我一直在使用Django一段时间,但我很新的将网站投入生产。不幸的是,我使用了非Django友好的托管服务(HostGator),并使用FastCGI和教程here设置了Django。 Django版本是1.3 ... :(Django静态文件未在生产中加载

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

我没有获得编辑任何服务器CONFIGS或任何东西,所以我只能通过解决Django的代码这个问题。我欣赏的帮助。(代码将遵循)

设置。 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 %} 

回答

1

staticfiles_urlpatterns()不用于生产,只工作,如果DEBUG = True。你需要单独提供静态文件。我从来没有用fcgi使用过django,但我假设你可以相对容易地将其取消。

的文件正在寻找在yourdomain.com/static因为那是你的STATIC_URL

首先,改变你的STATIC_ROOT到一个公共目录设置。你应该有这样的东西/home2/mlinsenb/public_html你把你的index.fcgi文件。在此处创建一个static目录并更改您的STATIC_ROOT = "/home2/mlinsenb/public_html/static"

您可能还想为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,其中recommend只是让Django使用WSGI插件提供静态文件。他们曾经推荐dj-static,现在他们推荐whitenoise