无法让Apache提供django管理静态文件

时间:2012-09-30 09:10:42

标签: django apache

我正在尝试将Django部署到apache但无法让它为我的静态管理文件提供服务。它似乎是在/ var / www / static下寻找它们,我似乎无法改变它。

除了样式之外,管理网站似乎正在工作。我得到一个标题和一个登录表单。我的django应用程序也在运行。这是管理员未提供的静态文件。

使用Django 1.4.1。

这些文件位于/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static下,并链接到/ home / dutt / vaccapp / backend / static / admin。

apache错误日志说明了这个

[Sun Sep 30 10:57:20 2012] [error] [client 192.168.1.10] File does not exist: /var/www/home, referer: http://dathui.example.com/vaccapp/admin/
[Sun Sep 30 10:57:20 2012] [error] [client 192.168.1.10] File does not exist: /var/www/home, referer: http://dathui.example.com/vaccapp/admin/

但我不确定如何改变它。

在我的django网站配置中我有

<VirtualHost *:80>
ServerAdmin me@host.com

    ServerRoot "/home/dutt/vaccapp"
    DocumentRoot "/home/dutt/vaccapp"
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /home/dutt/vaccapp/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

Alias /static/ "/home/dutt/vaccapp/backend/static/"
<Directory "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static">
    Order allow,deny
    Options Indexes
    Allow from all
    IndexOptions FancyIndexing
</Directory>

未在apache2.conf中设置ServerRoot。

来自我的settings.py

STATIC_ROOT = '/home/dutt/vaccapp/backend/'
STATIC_URL = '/static/'

没有添加到STATICFILES_DIRS。

这已添加到我的apache2.conf

WSGIScriptAlias /vaccapp /home/dutt/vaccapp/backend/wsgi.py
WSGIPythonPath /home/dutt/vaccapp

<Directory /home/dutt/vaccapp>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

5 个答案:

答案 0 :(得分:7)

ADMIN_MEDIA_PREFIX默认设置为/static/admin/#在Django 1.4中弃用(现在使用STATIC_URL + 'admin/'。结果相同。

以下是apache配置的修复:

Alias /static/admin "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static"
Alias /static "/home/dutt/vaccapp/backend/static"
<Directory "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static">
    Order allow,deny
    Options Indexes
    Allow from all
    IndexOptions FancyIndexing
</Directory>

WsgiScriptAlias必须从主apache配置移动到VirtualHost。

经过长时间的讨论,我们发现问题是Django没有正确安装admin静态......他们彼此符号链接(非常奇怪)。 Django重新安装修复它,它现在工作正常。

答案 1 :(得分:1)

就像Blazor一样,我不得不使用原版的一小部分。我的设置包括使用django admin的graphite-web。我只是张贴它作为参考。

我的apache的虚拟主机:

<VirtualHost *:80>
    ServerName graphite.myhost.com
    Redirect permanent / https://graphite.myhost.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName graphite.myhost.com

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/graphite.cert
    SSLCertificateKeyFile /etc/apache2/ssl/ssl_graphite.key
    SSLStrictSNIVHostCheck on

    WSGIDaemonProcess _graphite processes=5 threads=5 display-name='%{GROUP}' inactivity-timeout=120 user=_graphite group=_graphite
    WSGIProcessGroup _graphite
    WSGIImportScript /usr/share/graphite-web/graphite.wsgi process-group=_graphite application-group=%{GLOBAL}
    WSGIScriptAlias / /usr/share/graphite-web/graphite.wsgi

    AliasMatch ^/admin/(.*)static/admin(.*)$ /usr/lib/python2.7/dist-packages/django/contrib/admin/static/admin/$2
    <Directory "/usr/lib/python2.7/dist-packages/django/contrib/admin/static/admin/">
            Order allow,deny
            Allow from all
    </Directory>

    Alias /content/ /usr/share/graphite-web/static/
    <Location "/content/">
            SetHandler None
    </Location>

    <Location "/">
            Order allow,deny
            allow from all
            AuthType Basic
            AuthName "Restricted Zone"
            AuthBasicProvider wsgi
            WSGIAuthUserScript /var/www/django_auth.wsgi
            Require valid-user
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/graphite-web_error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/graphite-web_access.log combined

</VirtualHost>

我还添加了STATIC_URL = 'static/',以确保我对正则表达式没有任何问题。

答案 2 :(得分:1)

尝试使用下一个

python manage.py collectstatic

The staticfiles app - Django documentation

答案 3 :(得分:0)

我的低声望迫使我写一个完整的答案,为伊戈尔的回答添加一个小细节。

我只是将apache配置部分添加到我的配置中,但这还不够。我不得不改变:

"/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static"

"/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin"

在第一个Alias<Directory>指令中。

答案 4 :(得分:0)

在运行Django + Apache时遇到类似的问题,Django管理站点缺少所有样式。这是我解决的方法:

apache conf:httpd-app.conf

Alias /static "/...path/to/your/django.../site-packages/django/contrib/admin/static"
<Directory "/...path/to/your/django.../site-packages/django/contrib/admin/static">
    Require all granted
</Directory>

上面的/...path/to/your/django.../,可以通过pip show django

找到