1

私の見解では、私が指定した場合

def myView(request):
    return render_to_response('myTemplate.html', {'user': request.user,}, 
        context_instance=RequestContext(request))

STATIC_URL次に、myTemplate.htmlなどの設定にアクセスできます。

ただし、指定すると

def myView(request):
        return render_to_response('myTemplate.html', {'user': request.user,})

その後、アクセスできませんSTATIC_URL。この後者の場合、{{ STATIC_URL }}レンダリングされたページに空の文字列が生成されます。前者の場合、{{ STATIC_URL }}静的URLの適切な文字列( "/ static /")を生成します。

STATIC_URLテンプレートの設定にアクセスするためにリクエストコンテキストを送信する必要があるのはなぜですか?

Apache2でDjango1.4を実行しています。

4

3 に答える 3

3

より良い答えについては、ドキュメントをお読みください。しかし、短い答えがあります:

これは、DRY(Do n´t Repeat Yourself)が原因で、次のように考えてください。すべてのビューですべてのテンプレートに同じ変数を設定する必要がある場合はどうなりますか?:context_processorsは、より順序付けられた方法でテンプレートに変数を追加するメソッドです。

私は引用します:

Djangoには、通常のdjango.template.Contextとは少し異なる動作をする特別なContextクラスdjango.template.RequestContextが付属しています。最初の違いは、最初の引数としてHttpRequestを使用することです。例えば:

c = RequestContext(request, {
    'foo': 'bar',
})

2番目の違いは、TEMPLATE_CONTEXT_PROCESSORS設定に従って、コンテキストにいくつかの変数が自動的に入力されることです。

于 2012-05-18T22:10:09.613 に答える
1

設定にアクセスするSTATIC_URLには、リクエストコンテキストを送信する必要があります。これは、デフォルトでは、RequestContextインスタンスに何らかの変数が自動的に入力され、それに応じて、TEMPLATE_CONTEXT_PROCESSORSデフォルトでも次のように読み取られる設定が含まれるためです。

(...
"django.core.context_processors.static",
...)

コンテキストプロセッサについてdjango.core.context_processors.static、ドキュメントには次のように記載されています。

TEMPLATE_CONTEXT_PROCESSORSにこのプロセッサが含まれている場合、すべてのRequestContextに変数STATIC_URLが含まれ、STATIC_URL設定の値を提供します。

代わりに、パーツを指定しない場合context_instance=RequestContext(request)。この署名を検討してください。

render_to_response(template_name[, dictionary][, context_instance][, mimetype])

この場合、基本Contextインスタンスが使用され、(このため)指定dictionaryされたアイテムのみがテンプレートに挿入されます。このディクショナリには、の値が含まれる場合と含まれない場合がありますsettings.STATIC_URL

注:別の回答で指摘されているように、Django 1.3以降では、引数を使用renderする代わりにショートカットを直接使用できます。render_to_response()context_instance

公式ドキュメントへの参照:

于 2012-05-18T22:30:13.487 に答える
0

1.4を使用しているため、新しいrender()ショートカットを使用します。次に、次のことができます。

def myView(request):
        return render(request, 'myTemplate.html', {'user': request.user,})
于 2012-05-18T22:30:18.603 に答える