7

この問題は非常に単純ですが、私には理解できません

私のurlpatternsに追加されました

url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/home/user/www/site/static'})

ここで、私のmain.cssは次のとおりです。/home/user/www/site/static/css/main.css

http:// localhost:8000 /static/にアクセスしたとき

取得:404:ディレクトリインデックスはここでは許可されていません。

http:// localhost:8000 / static / css/main.cssにアクセスしたとき

取得:404:'css/main.css'が見つかりませんでした

私は何が間違っているのですか?

修正:

url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT } ),

settings.pyで

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = os.path.join(CURRENT_PATH, 'static') #=='/home/user/www/site/static'

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/mystatic/'

ご覧のとおり、実際に変更したのはSTATIC_URL ='/static/'からSTATIC_URL='/mystatic/'だけでした。

注:http:// localhost:8000 / mystaticにアクセスすると、上記と同じエラーが発生します

テンプレートで{{STATIC_URL}}を使用できるように、STATIC_URLは「/ static /」であると考えていました...この修正が機能した理由と、変更を加えなければならなかった理由がよくわかりません。 ...。

なぜこれが機能するのですか?

4

3 に答える 3

9

組み込みの開発Webサーバーを使用している場合(つまり、で実行している場合manage.py runserver)、Djangoは開発中に静的ファイルを処理します。

STATIC_ROOTDjangoがファイルを提供するパスではなく、静的ファイルを収集するパスであることに注意してください。あなたは自分自身を維持するべきではありませんSTATIC_ROOT!詳細については、Djangoのドキュメントをご覧ください。

django.views.static.serve通常、組み込みサーバーを使用してURLに追加する必要はありません。

静的ファイルは、以外の場所に配置する必要がありますSTATIC_ROOTmyapp/staticパス内(つまり、個々のアプリの静的ファイルの下)に配置できます。プロジェクト全体(例)専用の静的フォルダーを作成し、次のように/path/to/project/proj_settings更新STATICFILES_DIRSするsettings.pyこともできます。

STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(PROJECT_DIR, 'proj_static'),
)

次に、css/main.cssファイルをに配置できます/proj_static/css/main.css。Djangoの組み込みWebサーバー/static/がそこからサーバーになります。

STATIC_ROOT本番環境では、を実行して、のすべての静的ファイルを収集する必要がありますmanage.py collectstatic。次に、Djangoを介さずに、Webサーバー(nginx、Apacheなど)を介してそのフォルダーを直接提供できます。

于 2011-06-15T21:14:30.787 に答える
1

主に2つのステップ:

  1. STATIC_ROOTパスを確認してください。

    ファイルは存在しますか?/home/user/www/site/static/css/main.css

    そうでない場合は、「python manage.py collectstatic」を実行して、静的ファイルをSTATIC_ROOTパスにコピーする必要があります。

    「collectstatic」がcssファイルをSTATIC_ROOTパスにコピーできない場合は、「STATICFILES_DIRS」のソースcssパスを確認する必要があります。

  2. developmente envで(runserverを使用してWebサーバーを起動します)、次のことを確認してください。

    a)settings.py:INSTALLED_APPSインクルード:'django.contrib.staticfiles'

    b)urls.py:urlpatterns + = staticfiles_urlpatterns()

ステップ2.bを構成していないと思います。メソッドは問題ないはずですが、ハードコーディングされています。

url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT } ),

djangoのドキュメントでは、すでに言及されています。

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
于 2011-07-20T09:22:50.243 に答える
0

settings.pyでSTATIC_URLを設定する必要があります

あなたの場合、それは

STATIC_URL = '/static/'
于 2011-06-15T20:20:21.967 に答える