How to transfer data to any template from any kind in Django?

As a good little coder, all my Django templates inherit from base.html. Now I would like to add functionality to the database, to always show interesting things. Some user statistics, or random messages, or channels, etc.

All my views look like this:

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

How can I make template_values ​​always populate for all my views? Should I do this at the beginning of all my views? How in:

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

Or is there a better way?

+2
source share
2 answers

You must 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 will add a few 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 the GMap keys. Here is this 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" 
+9
source

For this, I use contextual processors. For example, if I want to get the MEDIA_URL variable for each view, I define context_processors.py as follows:

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

in settings.py you should have

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

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)) 
+4
source

Source: https://habr.com/ru/post/1300328/


All Articles