STATICFILES_DIR不适用于Apache Web服务器

时间:2015-09-22 19:50:30

标签: python django apache

我正在默认Django服务器和Apache上测试同一个应用程序,我看到了很多重大差异。我设法解决了其中一些问题,但此时此刻我无法解决重大问题。因此,在项目settings.py文件中,我有以下代码:

MODULES_DIR = BASE_DIR + '/system/modules/'

for item in os.listdir(MODULES_DIR):
    stat = os.path.join(MODULES_DIR, item + '/static')
    if os.path.isdir(os.path.join(MODULES_DIR, item)):
        INSTALLED_APPS += ('system.modules.%s' % item, )
        STATICFILES_DIR += (stat, )

APPS_DIR = true

此代码应根据INSTALLED_APPS文件夹的内容动态填充BASE_DIR + '/system/modules/'。换句话说,如果/modules内有文件夹,则此文件夹将成为应用程序。同样,我动态构建STATICFILES_DIR - 在这种情况下,假设每个folder/application(在/modules文件夹内)都有一个带有静态内容的/static文件夹 - js ,css等。例如,它可能是这样一种结构:

\modules
    \DefaultModule
        __init__.py
        urls.py
        views.py
        \static
            test.js
        \templates
            DefaultModule.html

此示例中的DefaultModule.html加载如下的静态文件:

<html>
<head>
{% load static from staticfiles %}
<script type="text/javascript" src="{% static "test.js" %}"></script>

这很有意思,但在默认的Django服务器上,这个逻辑非常有效,所以当我在浏览器中访问localhost/DefaultModule/时,我看到加载了一个模板DefaultModule.html,我看到{{1}从test.js加载的文件。但是,在Apache上,模板也会呈现,但http://localhost/DefaultModule/static/文件是从test.js加载的,最终会导致http://localhost/static/错误。因此,由于某种原因,Apache服务器没有考虑404 NOT FOUND。是的,我检查了它(我的意思是STATICFILES_DIR)的内容,它是一样的。在这两种情况下STATICFILES_DIR都包含STATICFILES_DIR,但在Apache上由于某种原因会被忽略。希望有人能提供帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你应该阅读关于静态文件的Django文档。看起来你已经陷入了简单的旧Django Static File Hosting an Apache

查看并告诉我们。