どのように私はジャンゴで任意のビューから任意のテンプレートにデータを渡すことができますか?

StackOverflow https://stackoverflow.com/questions/1071572

質問

良い少しコーダのように、私のDjangoのテンプレートの全てがbase.htmlから継承します。今、私は常にいくつかの興味深いことを示すために、ベースにいくつかの機能を追加したいと思います。一部のユーザー統計、またはランダムポスト、または飼料など

私の意見の

すべて次のようになります:

def viewname(request) :
    template_vales = {}
    // Stuff
    return render_to_response('some_file_name.html', template_values)
template_valuesの値は、常に私のすべてのビューのために移入されるように

どのように私はそれを行うことができますか?私は私のすべてのビューの開始時にこれを実行する必要がありますか?以下のように:

import utils

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

それとも、より良い方法はありますか?

役に立ちましたか?

解決

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

http://docs.djangoproject.com/en/dev/ref /テンプレート/ API /

のhttp:// WWW .B-list.org /ブログ/ 2006/6月/ 14 /ジャンゴ - ヒント - テンプレート - コンテキストプロセッサ/

私のsettings.pyでは、私は(最後の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",)

I追加最初のビューのための正規のURLを定義し、GMapのキーとの間の第2のスイッチ。ここではその機能があります:

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"

他のヒント

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

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

settings.pyにあなたが持っている必要があります。

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

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

def my_view(request):
return render_to_response('base.html',{},
                              context_instance=RequestContext(request))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top