Django 1.11 - 未提供静态文件 - PythonAnywhere

时间:2018-02-11 13:12:15

标签: django web-deployment django-staticfiles pythonanywhere

我正在将一个django 1.11应用程序部署到PythonAnywhere环境。

设置文件包含' django.contrib.staticfiles'添加到INSTALLED_APPS和静态配置

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static_col')

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

静态文件夹的文件夹结构:

├── css
├── fonts
├── img
├── jquery.templates
└── js
    └── jquery

在本地开发应用程序时,我正在使用" /static/jquery.templates/jquery.templates.js"在执行manage.py runserver时没有问题,但是在我没有提供任何静态文件的部署中它不起作用。

我执行了manage.py collectstatic,但没有错误,但它移动了文件夹" jquery.templates"到js one:

static_col/
├── admin
    ...
├── css
├── fonts
├── img
└── js
    ├── jquery
    └── jquery.templates

问题

显然,提供了其他静态文件,但问题是未找到链接/static/js/jquery.templates/jquery.templates.js。显然,/ static / jquery.templates / jquery.templates.js链接都不起作用。我不知道如何处理这个问题。

提供静态文件对于Django来说是一件痛苦的事,我还没有找到一份工作指南。

谢谢

1 个答案:

答案 0 :(得分:3)

我知道我在部署第一个项目时遇到了类似的问题。我发现解决方案是在我的应用程序静态文件夹中放置一个名为与应用程序相同的文件夹。这可以防止我的静态文件出现许多奇怪的名称冲突和意外位置。

申请结构

django_project
├─ static_col
├─ app1
│  └─ static
│     └─ app1
│        ├─ js
│        │  ├─ jquery1.js
│        │  └─ functions1.js
│        └─ css
│           └─ styles1.css
└─ app2
   └─ static
      └─ app2
         ├─ js
         │  └─ functions2.js
         └─ css
            └─ styles2.css

manage.py collectstatic之后

django_project
└─ static_col
   ├─ app1
   │  ├─ js
   │  │  ├─ jquery1.js
   │  │  └─ functions1.js
   │  └─ css
   │     └─ styles1.css
   └─ app2
      ├─ js
      │  └─ functions2.js
      └─ css
         └─ styles2.css

然后在您的模板中确保使用{% static 'app1/js/functions1.js' %}(请注意添加app1)来引用您的文件。我发现这解决了collectstatic的大多数问题。

最后,您需要确保您的服务器/主机实际上正在提供静态文件。你提到了PythonAnywhere,所以我会看一下这篇博文https://blog.pythonanywhere.com/60/并仔细检查你是否已经设置了正确的目录来提供静态文件(在上面的例子中为django_project/static_col)。