1

私は初めて Django アプリの作成に取り組んでいるので、少し遅れている場合はご容赦ください。

ここに私のsettings.pyからの抜粋があります:

STATIC_ROOT = os.getcwd().replace('\\','/') + '/static'

STATIC_URL = '/static_files/'

STATICFILES_DIRS = (
    os.getcwd().replace('\\','/') + '/static'
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

注:回線が機能​​することを願っていos.getcwd()...ます。私の問題ではないと確信していますが、これが問題である場合はお知らせください。これはローカル開発用のプレースホルダーであるため、デプロイ時にそこに残っていることを心配する必要はありません。

私の最初の問題は、テンプレート変数が機能していないように見えることです。

メインのテンプレート ファイルからの抜粋:

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL|default:'/static_files/' }}css/base.css" />

もともと{{ STATIC_URL }}そこにあっただけでしたが、何も返されなかったので、追加してみまし|default:'...'た。これにより、結果の HTML で指定された文字列が正常に生成されましたが、それでも機能しませんでした。これにより、2 番目の (そしてより重要な、正直なところ) 問題が発生します。

静的ファイルをまったく機能させることができません。ここでいくつかの異なる方法を試しました。上記の各変数に絶対パスと相対パスを (さまざまな組み合わせで)入れてみました。代わりにSTATIC_*同等のMEDIA_URL変数を使用してみました。また、以下を my に入れてみましたurls.py:

urlpatterns = ('',

    # ...

    (r'^static_files/(?P<path>.*)$', 
        'serve', {
            'document_root': '/path/to/django/dir/static_files/',
            'show_indexes': True 
        }
    ),
)

(上記のスニペットはhttp://www.arthurkoziel.com/2008/09/02/handling-static-files-django/から取得しました。)

ここで、最初の開発が完了したら、最終的に並列 Apache プロセスから静的ファイルを提供することを願っていますが、何が間違っているのかを知りたいと思っています。オンラインまたは StackOverflow で、静的ファイルに関する十分に包括的なチュートリアルを見つけることができませんでした。

すべてのヘルプは大歓迎です。

編集:重要な場合、私はPython 2.7を使用してWindows 7を使用しています。

4

1 に答える 1

3

1 つの可能性 - RequestContext を渡さない限り、STATIC_URL はテンプレートに入力されません。

ビューに次のようなものがあることを確認してください。

return render_to_response(template, context, context_instance=RequestContext(request))

Django 1.3 以降では、新しいショートカットも使用できます。

return render(request, template, context)

また、コンテキスト プロセッサに「django.core.context_processors.static」があることを確認してください。


編集:2番目の問題に対する可能な答え、変更してみてください

STATICFILES_DIRS = (
    os.getcwd().replace('\\','/') + '/static'
)

STATICFILES_DIRS = (
    os.getcwd().replace('\\','/') + '/static',
)

編集 2: その他の可能な修正

STATICFILES_FINDERS を削除できます。デフォルトに設定されているだけなので、後で拡張する予定がない限り、削除してください(問題が1つ少なくなります).

urlpatterns エントリを削除することもできます。必要はありません。

あなたの STATIC_ROOT はおそらく間違っています。これは、本番環境に移行するときに、Django がプロジェクト全体 (STATICFILES_DIRS で説明されているディレクトリを含む) からすべての静的ファイルを収集する場所である必要があります。

私の典型的なsettings.pyの例:

PROJECT_DIR = os.path.dirname(__file__)

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, 'static'),
)

STATIC_ROOT = '/var/www/myproject_staticfiles/'

それでおしまい!

Django が静的ファイルを正しく見つけて配置しているかどうかをテストしたい場合は、実行してみてください。

python manage.py collectstatic

私の場合、それは私のプロジェクトディレクトリを通過し、すべての静的ファイルを見つけて、それらを '/var/www/myproject_staticfiles/' にコピーし、そこでそれらを apache でホストできます。

Django 開発サーバーは、プロジェクト フォルダー内から静的ファイルを自動的に提供するため、開発中に collect_static は必要ありません。本番環境に入るまで、STATIC_ROOT を設定する必要さえありません。

于 2011-10-17T05:09:11.870 に答える