14

私はDjangoの初心者で、最初のプロジェクトに取り組んでいて、静的ファイルに問題があります。

django.contrib.authの2つのテンプレートで構成される単純な認証システムを作成しました。すべてのアプリによってレンダリングされたすべてのテンプレートにアクセスできるようにしたいグローバル静的コンテンツがあります。mysite/templates/index.htmlmysite/templates/registration/login.htmlmysite/static

mysite/templates/index.html<img src="{{ STATIC_URL }}pics03.jpg"/>URLにアクセスすると、どのレンダリングとして"static/pics03.jpg"正常に読み込まれるかが含まれますlocalhost:8000/

mysite/templates/registration/login.html<img src="{{ STATIC_URL }}pics03.jpg"/>これも含まれ"static/pics03.jpg"、URLにアクセスしたときに読み込まれ、読み込まれません"localhost:8000/accounts/login/"

私のurls.pyには次のものがあります。

urlpatterns = patterns('',
   url(r'^$', 'mysite.views.home'), # plays index.html template
   url(r'^accounts/login/$', 'django.contrib.auth.views.login'),

私のsettings.pyには次のものがあります。

PROJECT_DIR = os.path.dirname(__file__)

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,'static'),
)  

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

STATIC_URL = '/static/'

STATIC_ROOT = ''

DjangoはSTATICFILES_DIRSでグローバル静的コンテンツを検索する必要があるという印象を受けましたが、静的フォルダーへの絶対パスにURLを変更しても、login.htmlの静的コンテンツが見つかりません。誰かがこれに光を当てることができますか?

4

3 に答える 3

21

あなたの問題はあなたがあなたのurls.pyのどこにもURL「/static/」を聞いていないということです

apacheやnginxなどのWebサーバーを介してアプリケーションを提供する場合、Webサーバーが静的ファイル自体を処理するため、これは正常です。

開発用に、Djangoには静的サーバーが組み込まれています

urls.pyに、最後に追加します

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()

これは、/ static / urlを追加して、Webサーバーなしでそれらを提供できるようにすることです。

これは同等です

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

dev-onlyルールを使用するには、URLルールを「ifsettings.DEBUG」でラップする必要があると言う人もいますが、これはまったく必要ありません。実際、これは悪いアドバイスだと思います。

于 2012-04-20T09:32:50.593 に答える
1

runserverでビルドを使用するときに問題が発生しましたか、それともApacheなどを使用してサービスを提供していますか?私はこれに少し苦労しました。私が従うドキュメントは次のとおりです:https ://docs.djangoproject.com/en/stable/howto/static-files/

2番目の部分は、展開する準備ができたときに重要です。静的ルート(最初は空になります)を定義し、manage.py collectstaticコマンドを実行して、プロジェクト全体からそのフォルダーに静的ファイルを移動する必要があります。その後、そこからそれらを提供することができます。

于 2012-04-18T20:11:14.407 に答える
0

助けるために変更STATIC_ROOT=''STATIC_ROOT='/'ますか?

唯一の違いは、static/pics03.jpg(相対パス)がホームページに存在するが、他には存在しないことです。

どちらの場合も絶対パス/static/pics03.jpgが存在します。変更しても問題が解決STATIC_ROOTしない場合/は、URLの先頭にを追加してください。

于 2012-04-18T21:23:51.843 に答える