I'm testing one and the same application both on the default Django
server and on Apache
and I see a lot of big differences. I managed to resolve some of them, but at this moment I'm unable to resolve a major difference. So, in project settings.py
file I have this code:
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
This code is supposed to populate INSTALLED_APPS
dynamically, based on the contents of BASE_DIR + '/system/modules/'
folder. In other words, if there is a folder inside /modules
, this folder becomes an application. Likewise, I build dynamically STATICFILES_DIR
- in this case it is supposed, that every single folder/application
(which is inside /modules
folder) has a /static
folder with static contents - js, css etc. For example, it may be such a construct:
\modules
\DefaultModule
__init__.py
urls.py
views.py
\static
test.js
\templates
DefaultModule.html
And DefaultModule.html
in this example loads static files like this:
<html>
<head>
{% load static from staticfiles %}
<script type="text/javascript" src="{% static "test.js" %}"></script>
It is rather interesting, but on default Django server this logic works perfectly, so that when I go in my browser to localhost/DefaultModule/
, I see a template DefaultModule.html
loaded and I see test.js
file loaded from http://localhost/DefaultModule/static/
. However, on Apache the template is rendered too, but the test.js
file is loaded from http://localhost/static/
what eventually results in a 404 NOT FOUND
error. So, for some reason Apache server does not take into account STATICFILES_DIR
. And yes I checked its (I mean STATICFILES_DIR
) contents and it is the same. In both cases STATICFILES_DIR
contains modules/DefaultModule/static/
, but on Apache it is ignored for some reason. Hope someone can help. Thanks!