我正在默认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上由于某种原因会被忽略。希望有人能提供帮助。谢谢!
答案 0 :(得分:1)
我认为你应该阅读关于静态文件的Django文档。看起来你已经陷入了简单的旧Django Static File Hosting an Apache
查看并告诉我们。