CSS不使用Apache,Django和mod_wsgi进行渲染

时间:2017-04-08 14:57:38

标签: python css django apache

我正在努力让Apache 2.4.7使用mod_wsgi 4.5.15和Python 3.5.3作为虚拟环境来提供Django 1.8.17应用程序。这是我在机器上唯一的虚拟环境(Linux Mint 17.3)。

所有动态内容都是通过,但不是所有的静态内容。

  • 我的项目中有几个应用程序,当我运行collectstatic时,它似乎将它们全部放在一个正确的位置,就像它应该的那样。我检查了所有这些,他们都在那里。

  • 我已使用" sudo chown -R www-data:www-data ..."。

  • 给了该位置的所有文件权限。
  • 我修改了我的Apache虚拟主机文件,添加了指向我的"媒体"和"静态"使用绝对路径的目录。

  • 当它不起作用时,我修改了settings.py,并尝试将确定STATIC_ROOT和STATICFILES_DIRS的动态代码更改为绝对路径(也没有工作,我将其更改回来)

home/magic-rat/
|
|_____+virtualenvs
|               |
|               |+ektropy_project
|                        |
|                        |+lib
|                           |
|                           |+python3.5
|                                |
|                                |+site_packages
|
|_____+ektropy_project   
                  |
                  |-manage.py
                  |+static (for pinax)
                  |        |
                  |        |+dist
                  |        |+src
                  |
                  |+ektropy_project
                           |
                           |-wsgi.py
                           |
                           |+site_media
                                 |
                                 |+media
                STATIC HERE=>    |+static 
                                    |
                                    |+admin
                                    |+bootstrap
                                    |+css 
                                    |+fonts
                                    |+js
                                    |+pinax

Apache虚拟主机:

Alias /media /home/magic-rat/ektropy_project/ektropy_project/site_media/media
<Directory /home/magic-rat/ektropy_project/ektropy_project/site_media/media>
    Require all granted
</Directory>

Alias /static /home/magic-rat/ektropy_project/ektropy_project/site_media/static
<Directory /home/magic-rat/ektropy_project/ektropy_project/site_media/static>
    Require all granted
</Directory>

WSGIDaemonProcess ektropy_project python-home=/home/magic-rat/virtualenvs/ektropy_project python-path=/home/magic-rat/ektropy_project
WSGIProcessGroup ektropy_project
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /home/magic-rat/ektropy_project/ektropy_project/wsgi.py

<Directory /home/magic-rat/ektropy_project/ektropy_project>
    <Files wsgi.py>
       Require all granted
    </Files>
 </Directory>

Settings.py的相关部分:

    import os

PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
BASE_DIR = PACKAGE_ROOT

MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "media")

MEDIA_URL = "/site_media/media/"

STATIC_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "static")

STATIC_URL = "/site_media/static/"

# Additional locations of static files
STATICFILES_DIRS = [
    os.path.join(PROJECT_ROOT, "static", "dist"),
]

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = [
    "django.contrib.staticfiles.finders.FileSystemFinder",
    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
]

ROOT_URLCONF = "ektropy_project.urls"

WSGI_APPLICATION = "ektropy_project.wsgi.application"

我真的很茫然。

&#34; django.contrib.staticfiles&#34;,在&#34; INSTALLED_APPS&#34;

没有抛出任何错误。 Apache错误日志很干净。 Apache无法看到静态内容。

1 个答案:

答案 0 :(得分:0)

chown -R www-data:www-data并不是你想要的。它仍然可以是以前的用户。关键是所有目录下到静态文件具有权限o+rx的目录,文件本身是o+r。如果层次结构中的某个目录到目前为止具有不正确的权限,则Apache用户将无法从目录中读取任何内容。

但看起来不对的是:

MEDIA_URL = "/site_media/media/"
STATIC_URL = "/site_media/static/"

这些与Apache配置中的内容不匹配。

将这些更改为:

MEDIA_URL = "/media/"
STATIC_URL = "/static/"

或将Apache配置更改为:

Alias /site_media/media /home/magic-rat/ektropy_project/ektropy_project/site_media/media
<Directory /home/magic-rat/ektropy_project/ektropy_project/site_media/media>
    Require all granted
</Directory>

Alias /site_media/static /home/magic-rat/ektropy_project/ektropy_project/site_media/static
<Directory /home/magic-rat/ektropy_project/ektropy_project/site_media/static>
    Require all granted
</Directory>

Alias指令的第一个参数应与MEDIA_URLSTATIC_URL匹配。