How can I pass data to any template from any view in Django?

后端 未结 2 637
天命终不由人
天命终不由人 2020-12-20 02:20

Like a good little coder, all of my Django templates inherit from a base.html. Now I would like to add some functionality to the base to always show some interesting things.

相关标签:
2条回答
  • 2020-12-20 02:25

    For this I use context processors. For example, if I want get variable MEDIA_URL for each view, I define context_processors.py like this:

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

    in settings.py you must have

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

    in view you must have render_to_response and context_instance=RequestContext(request) For example:

    def my_view(request):
    return render_to_response('base.html',{},
                                  context_instance=RequestContext(request))
    
    0 讨论(0)
  • 2020-12-20 02:27

    You should use context processors:

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

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

    In my settings.py, I add a couple of functions to the standard ones (see the last two):

    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",)
    

    The first one I add defines the canonical URL for the view, and the second switches between GMap keys. Here's that function:

    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 讨论(0)
提交回复
热议问题