6

Djangoは、動的ファイルと静的ファイルの両方を提供するために1つのサーバー(Apache)のみを使用する場合は、を使用して静的ファイルをdjango.contrib.staticfiles提供することを推奨しています。

だから私の中で私は私のとsettings.py私のにロードdjango.contrib.staticfilesしました。INSTALLED_APPSdjango.core.context_processors.staticTEMPLATE_CONTEXT_PROCESSORS

管理者テンプレートで、次のような静的ファイルにリンクしていることに気付きました(から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/...プレフィックスが付いているため、フルパス(私の場合)は次のようになります。

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

そのため、そのパスをSTATICFILES_DIRS内部に設定しましsettings.pyたが、Apacheは(サーバーを再インストールした後)静的ファイルを提供しません。ロジックのどこを間違えたのですか?

4

2 に答える 2

8

説明と私自身でそれを学ぶ機会を与えてくれたダニエル・ローズマンに感謝します(そして今私は忘れません!):-)。

最初は本当に混乱していて、最初に静的ファイルを収集してから、Apacheにそれを提供するように指示する必要があることを知りませんでした。アプリを使っSTATICFILES_DIRSて含めるだけで十分だと思いました。staticsettings.py

だからここに私がそれをした方法があります(そして私がそれをもっとうまくできたかどうか私に知らせてください):

settings.py

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

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

次に、/var/www/localhost/htdocs/mysite/タイプでpython manage.py collectstatic -l。コピーする代わりに、見つかったすべての静的ファイルへの-lシンボリックリンクを作成する手段(スペースを節約します)。

次に、Apache構成ファイル(通常はhttpd.conf)を編集し、情報を追加しSTATIC_URLます。Django専用の設定ファイルは次のようになります。

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を再起動して完了です。

于 2012-04-01T08:39:21.760 に答える
3

リンク先のドキュメントには、staticfilesアプリでのファイルの提供については何も記載されていません。これは、静的ファイルを1つの場所に収集して、Apacheで簡単に提供できるようにするためのものです。(これは開発中のファイルの提供を扱いますが、それは私たちがここで話していることではありません。)

static /プレフィックスを介して、関連する場所からファイルを提供するようにApacheを設定する必要があります。

于 2012-03-31T22:46:03.660 に答える