Djangoテンプレートに画像を表示する方法
-
25-10-2019 - |
質問
申し訳ありませんが、私の質問は非常に基本的です。テンプレートページに画像を表示したいのですが、勤務時間があります。画像は表示されていません。 test.html、およびStatic Static secondPrjtフォルダーに名前が付けられたフォルダーを作成し、その中にフォルダー画像を作成し、必要なすべての画像をそこに配置します
urls.py:
urlpatterns = patterns( ''、
#例:
#url(r '^$'、 'secondprjt.views.home'、name = 'home')、
(r '^$'、 'views.index')、
.........
)
urlpatterns += staticfiles_urlpatterns()
views.pydjango.shortcutsからimport render_to_responseから
DEFインデックス(リクエスト):
RENDER_TO_RESPONSE( 'test.html')を返します
test.html:
IMG src = "{{static_url}} images/img03.jpg" width = "186" height = "186"
settings.py
static_root = "c:/wamp/www/secondprjt/static"
static_url = '/static/'
staticfiles_dirs =( "c:/wamp/www/secondprjt/static"、)
staticfiles_finders =( 'django.contrib.staticfiles.finders.filesystemfinder'、 'django.contrib.staticfiles.finders.appdireceriesfinder'、
)
installed_apps =(
-----
'django.contrib.staticfiles'、
----
)
誰もが私に何が悪いのかを提案できますか。ノート私は使っている ウィンドウズ と django1.3 Development Serverを使用して、事前にありがとう
リクエストした後、以下を手に入れました http://127.0.0.1:8000/ 閲覧中
c: wamp www secondprjt> python manage.py runserver検証モデル...
0エラーが見つかったDjangoバージョン1.3、設定の「SecondPrjt.Settings」開発サーバーを使用して実行されています http://127.0.0.1:8000/Ctrl-breakでサーバーを終了します。 [05/Sep/2011 15:18:24] "Get/HTTP/1.1" 200 89 [05/Sep/2011 15:18:24 「get /images/img03.jpg http/1.1 "404 2028
解決
おそらく、あなたの問題は、あなたが両方で絶対URLを使用したことです STATIC_ROOT
と STATICFILES_DIRS
.
各静的ディードに絶対URLを含めたい場合(ハックのように感じますが、使用するだけで問題ありません staticfiles_urlpatterns()
開発中)、その後、単に設定するだけで問題を修正できます STATIC_ROOT = ''
.
編集: :それはあなたの唯一のバグではなかったようです。さらに、デバッグの出力を見ると、404について奇妙なことに気付くでしょう - それはから来ています /images/img03.jpg
. 。覚えていれば、追加しようとしました {{ STATIC_URL }}
それには、そうあるべきだったはずです /static/images/img03.jpg
.
これは、使用するときです render_to_response
, 、あなたは決してコンテキストを渡すことはありません(そのため、テンプレートにはアクセスできません STATIC_URL
- それは空白だと思う(したがって、なぜあなたは見なかったのか /static/
画像URLの一部として。使用したいときはいつでも どれか 文脈、あなた しなければならない テンプレートに渡します。この場合、使用する必要があります [RequestContext]
.
したがって、追加したことを確認する必要があります django.core.context_processors.static
に TEMPLATE_CONTEXT_PROCESSORS
の settings.py. 。使用する必要があります render_to_response
次のように:
def index(request):
return render_to_response('test.html', context_instance=RequestContext(request))
以下は、コンテキストプロセッサの説明です:
の settings.py, 、それからあなたは次のようなものを持っているでしょう:
TEMPLATE_CONTEXT_PROCESSORS = (
'constant_context_processor.constants',
'django.core.context_processors.static',
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.request', )
ここで重要な部分は、あなたが持っていることです django.core.context_processors.static
. 。 Djangoでは、コンテキストプロセッサはコンテキストDICTを返す関数です。たとえば、Djangoプロジェクトでは、次のコードスニペットをよく使用します。
cuntion_context_processor.py:
import settings
def constants(request):
return {
'CONSTANTS': settings.CONSTANTS,
}
(上記のことに注意してください settings.py, 、私は使用しました constant_context_processor.constants
コンテキストプロセッサの1つとして)。これにより、定数を定義できます settings.py たとえば、私のテンプレートでそれらを使用するために {{ CONSTANTS.favicon_url }}
.
ご覧のとおり、コンテキストプロセッサと使用の利点 RequestContext
一般的にテンプレートで必要なコンテキストが自動的に追加されるため、すべてのビューでコンテキストの辞書を手動で入力する必要はありません。 djangoは、通常テンプレートにアクセスしたい特定の変数があることを知っているため、コンテキストプロセッサを介してアクセス可能にします(たとえば、django.core.context_processors.requestは、特定のリクエストにアクセスできます。パラメーター、およびテンプレートからのあらゆる種類のメタデータ。たとえば、GETパラメーターに基づいてコンテンツを変更する場合に役立つことがよくあります。
あなたの場合、あなたは多くのコンテキストを使いたくありませんでしたが、あなたは少し使いたいと思っていました({{ STATIC_URL }}
)、そのため、少なくともdjango.core.context_processors.staticが必要でした。