2012-03-31 20 views
5

Djangoは、動的ファイルと静的ファイルの両方を提供するために1つのサーバー(Apache)のみを使用する場合は、I should serve static files using django.contrib.staticfilesとお勧めします。adminの静的ファイルをDjango 1.4のdjango.contrib.staticfilesで(1つのApacheサーバを使用して)提供するには?

は、だから私のsettings.pyに私は私のTEMPLATE_CONTEXT_PROCESSORSに私のINSTALLED_APPSdjango.core.context_processors.staticdjango.contrib.staticfilesをロードしました。

私はそれが(index.htmlから)このような静的なファイルへのリンクの管理テンプレートに気づい:

{% load i18n admin_static %} 

{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />{% endblock %} 

しかし、テンプレートタグadmin_staticを見て、それは単にstaticのラッパーです:

from django.conf import settings 
from django.template import Library 

register = Library() 

if 'django.contrib.staticfiles' in settings.INSTALLED_APPS: 
    from django.contrib.staticfiles.templatetags.staticfiles import static 
else: 
    from django.templatetags.static import static 

static = register.simple_tag(static) 

私はすべての管理者の静的ファイルがadmin/...のプレフィックスを持つserverdであるため、完全なパス(私の場合)は

/usr/lib64/python2.7/site-packages/django/contrib/admin/static 

settings.pyの中にSTATICFILES_DIRSというパスを設定しましたが、(サーバーを再起動しても)Apacheは静的ファイルを提供しません。私はどこで私の論理を間違えましたか?

答えて

9

説明のためにDaniel Rosemanさんに感謝し、私自身でそれを学ぶ機会を与えてくれました(そして今私は忘れないでしょう):-)。

は当初、私は本当に混乱していたと私はあなたが最初に持っていた知らなかったを果たすにそれをApacheに伝え、その後、静的ファイルを収集します。私は単にSTATICFILES_DIRSを使用し、settings.pyにはstaticアプリを含めて十分に良いと思った。だからここ

は(私はそれをよりよく行っていることができれば、私に知らせてください)私はそれをやった方法です:

STATIC_ROOT = '/var/www/localhost/htdocs/mysite/static/' 
STATIC_URL = '/static/' # default 

settings.pyで管理ファイルを収集する場所それは、Djangoは既に知っているようです独自のカスタムファイルを提供する必要がない限り(に何も指定する必要はありません。私はそうではないため、Djangoの静的ファイルに関する以前の経験はありませんでした)。

次に、​​のタイプpython manage.py collectstatic -l-lは、見つかったすべての静的ファイルをコピーする代わりに(スペースを節約する)シンボリックリンクを作成することを意味します。

次は、Apache設定ファイル(通常はhttpd.conf)を編集し、STATIC_URLの情報を追加します。

Alias /static/ /var/www/localhost/htdocs/mysite/static/ 
#In the form of... 
#Alias STATIC_URL STATIC_ROOT 

<Directory /var/www/localhost/htdocs/mysite/static> 
    Order deny,allow 
    Allow from all 
</Directory> 

WSGIScriptAlias//var/www/localhost/htdocs/mysite/mysite/wsgi.py 
WSGIPythonPath /var/www/localhost/htdocs/mysite 

<Directory /var/www/localhost/htdocs/mysite/mysite> 
    <Files wsgi.py> 
     Order deny,allow 
     Allow from all 
    </Files> 
</Directory> 

が続いてApacheを再起動して行わ:ちょうどDjangoのための私の設定ファイルは次のようになります!

+0

簡潔で、深く包括的な、ありがとう) –

3

あなたがリンクしているドキュメントは、には何も書かれていません。ファイルにはstaticfilesアプリがあります。そうではありません。静的ファイルを単一の場所に集めてApacheで簡単に処理できるようにするためです。

スタティック/プレフィックス経由で関連する場所からファイルを提供するには、Apacheを設定する必要があります。

+0

Djangoを 'mod_wsgi'でデプロイし、Django 1.4に含まれている' wsgi.py'を使ってApacheを既にインストールしました。私は[ドキュメントの提案](https://docs.djangoproject.com/en/1.4/howto/deployment/wsgi/modwsgi/)に従った。 – hobbes3

+0

だから?そのページの下に説明されているように、静的ファイルを提供するように設定する必要があります。 –

+0

それから私は混乱しています。 '/ var/www/localhost/htdocs /'に行って '/ usr/lib64/python2.7/site-packages/django/contrib/admin/static'または何かに' '静的' 'シンボリックリンクを作成する必要がありますか? ? – hobbes3

関連する問題