2009-07-01 9 views
2

良い小さなコーダーのように、私のDjangoテンプレートはすべてbase.htmlから継承しています。今では、基盤にいくつかの機能を追加して、常に面白いことをいくつか示したいと思います。 template_valuesの値は、常に私のすべてのビューのために移入されるように、私はそれを作ることができますどのようにどのようにしてDjangoの任意のビューから任意のテンプレートにデータを渡すことができますか?

def viewname(request) : 
    template_vales = {} 
    // Stuff 
    return render_to_response('some_file_name.html', template_values) 

:など一部のユーザー統計、またはランダムポスト、または飼料、

私の意見のすべては、このようになります?私はすべての意見の冒頭でこれを行う必要がありますか?次のように:

import utils 

def viewname(request) : 
    template_values = {} 
    utils.addDefaults(template_values) 
    // Stuff 
    return render_to_response('some_file_name.html', template_values) 

もっと良い方法がありますか?

答えて

9

あなたはコンテキストプロセッサを使用する必要があります

:私のsettings.pyで

http://docs.djangoproject.com/en/dev/ref/templates/api/

http://www.b-list.org/weblog/2006/jun/14/django-tips-template-context-processors/

を、私は標準的なもの(最後の2を参照)への機能のカップルを追加します

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request", 
    "django.core.context_processors.auth", 
    "django.core.context_processors.debug", 
    "django.core.context_processors.i18n", 
    "thetrailbehind.context_processors.canonical_url", 
    "thetrailbehind.context_processors.gmapkey",) 

最初に追加するものはビューの標準URLを定義し、2番目のものはGMapキー間を切り替えます。この関数は次のとおりです。

def gmapkey(request): 
    url = request.META['HTTP_HOST'] 
    key = "" 
    if url == "127.0.0.1:8000": 
    key = "ABQIAAAAGFSvsJjnPmsGb7IcfqoamBTpH3CbXHjuCVmaTc5MkkU4wO1RRhTaJZRNQLjBhGtJlm6eE4gJtku-Rw" 
    elif url == "192.168.11.3:8000": 
    key = "ABQIAAAAGFSvsJjnPmsGb7IcfqoamBTm8-wcGRt2V-0p00qdRdGeyDhtGBSRTbk2s1ciA8vzdxGeAnqq6g-F4g" 
    elif url == "192.168.11.17:7000": 
    key="ABQIAAAAmHGaJpkZhJ6huJ93yfaYERTmT93Y0kqi8UE3J2QowoLz6rHdtxTHqeJ0nRoENl5LY5gCqHhRK9Yasg" 
    elif url == "192.168.1.200:8000": 
    key="ABQIAAAAmHGaJpkZhJ6huJ93yfaYERR5_sKpsr8Ui4YjC4HGOe8xaUDeVhSxGV1r1rIL1OvmVMAGUQBoUK0H2w" 
    elif url == "192.168.1.73:8000": 
    key = "ABQIAAAAGFSvsJjnPmsGb7IcfqoamBR7_CRKSBu49YjvDOLq_-DZQHSIYBSip9sO5IHlFIoZMtDpVcduFQCnWg" 
    elif url == "www.trailbehind.com": 
    key="ABQIAAAAGFSvsJjnPmsGb7IcfqoamBQxFGSDsNggDdRtUnAb8L8sJ910FhSKwoOpNaUlGCQIhyl6Dy5Cbyb0lQ" 
    elif url == "dev.trailbehind.com": 
    key="ABQIAAAAmHGaJpkZhJ6huJ93yfaYERQzqIbhF_xOwOwM1oDO_kQqYhag7BRsoTInq2lBuE7fsgDN2xfyD2IL5A" 
    elif url == "trailbehind.com": 
    key = "ABQIAAAAGFSvsJjnPmsGb7IcfqoamBQL9YYTGyB2pLTiscy54DOfsaXeHBQqMBmq7UvWAZVenmRMtNr_bo3TMQ" 
    elif url == "tenuki.trailbehind.com": 
    key = "ABQIAAAAGFSvsJjnPmsGb7IcfqoamBQ5SkJUKVREyqcvaNQJsRscGi2yVhSj0mJSTasDiWec8Awxb_TUxOdElw" 
    elif url == "cabin.trailbehind.com": 
    key = "ABQIAAAAmHGaJpkZhJ6huJ93yfaYERSU-76xxg1tvy-8taAiiF1qqcGi1xSmjUhmAs_v2XAuGxKX_Y-4-gDP3Q" 
    elif url == "ec2-174-129-167-234.compute-1.amazonaws.com": 
    key = "ABQIAAAAmHGaJpkZhJ6huJ93yfaYERStHq7nubctzsNDgkYc34LoSNrRNhQVCNy2KFFm2BT1sG2yrXrw38ycNg" 
+0

だから私は からdjango.templateインポートRequestContextの と戻りrender_to_response( "MY_APP/my_template.html"、{ 'some_var': 'FOO'}、 context_instance = RequestContextの(リクエスト))すべてのビューで ?私はチュートリアルがその道を私を始めたと思う。ありがとう! –

+0

うん、ここに私のビュー機能の一つです: DEF(要求)をparks_by_state: 「」「」 状態= EncodedState.objects.all(「すべての状態のポリゴンで地図」) PAGE_TITLE州によって=「パーク地図' response_dict = {' 状態:make_json_states(状態)、 'PAGE_TITLE':PAGE_TITLE、} 戻りrender_to_response( "state_map.html"、 response_dict、 context_instance = RequestContextの(リクエスト)) –

4

これはコンテキストプロセッサを使用しています。私は、各ビューのための変数MEDIA_URLを取得したい場合たとえば、私はこのようなcontext_processors.pyを定義:settings.py

def media_url(request): 
    from django.conf import settings 
    return {'MEDIA_URL': settings.MEDIA_URL} 

あなたが例えばrender_to_responsecontext_instance=RequestContext(request) を持っている必要がありますビューで

TEMPLATE_CONTEXT_PROCESSORS = (
    .... 
    'django.core.context_processors.request', 
    'myaplication.context_processors.menuitems', 
) 

を持っている必要があります。

def my_view(request): 
return render_to_response('base.html',{}, 
           context_instance=RequestContext(request)) 
関連する問題