为django 1.8静态文件配置PythonAnywhere

时间:2015-06-07 18:48:48

标签: django static pythonanywhere

在PythonAnywhere Web选项卡中:

URL:     /static/
Path:    /home/username/project/static

在settings.py中:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

...

STATIC_URL = "/static/"

STATIC_ROOT = os.path.join(BASE_DIR, "static")

STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'project/static'),
)

在模板中:

{% load staticfiles %}
<link type="text/css" href="{% static 'MyApp/style.css' %}" />
<link type="text/css" href="{% static 'project/style.css' %}" />
...
<script type="text/javascript" src="{% static 'MyApp/script.js' %}" ></script>

我跑:

python manage.py collectstatic

将所有静态文件成功复制到/home/username/project/static,但是我为所有静态文件收到404错误。我只在PythonAnywhere上出现此错误。本地主机上的一切运行正常。

生成的html和404错误表示正在以下位置搜索文件:

http://username.pythonanywhere.com/static/MyApp/style.css
http://username.pythonanywhere.com/static/project/style.css
http://username.pythonanywhere.com/static/MyApp/script.js

这是我的预期,所以我假设我的误解在于这些目录实际上位于PythonAnywhere中。

我是Django的新手。请参阅我的问题:How do you link to site-wide static files in django 1.8?以获取有关我的静态文件结构的更详细说明。

P.S。我在PA的virtualenv中使用Django 1.8,所以请不要弃用/过时的答案。

更新:

项目结构:

project/
    project/
        static/            //STATICFILES_DIRS
            project/
                style.css  //site-wide style sheet
    MyApp/
        static/            //auto-search by {% static %} tag in local dev
            MyApp/
                style.css  //app-specific stylesheet
                script.js  //app-specific js
    static/                //STATIC_ROOT for production   
        project/           //copied by collectstatic
            ...            //same as above
        MyApp/             //same as above
            ...            //same as above

2 个答案:

答案 0 :(得分:1)

令人尴尬......忘记重新加载PA。

为了将来参考, 是如何根据1.8文档配置PA和django 1.8静态文件的。

别忘了重装!

答案 1 :(得分:0)

STATIC_ROOTSTATICFILES_DIRS不应指向相同的路径。 STATIC_ROOT是复制文件以便为生产环境提供服务的地方,通常由Apache或Nginx提供。

STATICFILES_DIRS本地开发期间的静态应用程序提供。

我通常构建我的项目:

my_project/
    my_project/
    static_assets/  <- STATICFILES_DIRS
        images/
        css/
        less/
        js/
    static/         <- STATIC_ROOT
    templates/

例如,css文件的链接如下所示:

{% static 'css/foo.css' %}

忽略STATICFILES_DIRS中指定的顶级目录。从示例代码的外观来看,您的{% static %}路径似乎没有指向正确的位置。

有关详细信息,请参阅static files app docs