如何从Django的任何视图中的数据传递到任何模板?
-
21-08-2019 - |
题
就像一个好一点的编码器,我所有的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 /君/ 14 / django的-TIPS-模板上下文处理器/
在我的settings.py,我加了几个功能,通用的标准(见最后两个):
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",)
在第一个我添加定义了视图的规范网址,和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"
其他提示
有关此我使用上下文处理器。例如,如果我想获得可变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_response
和context_instance=RequestContext(request)
例如:
def my_view(request):
return render_to_response('base.html',{},
context_instance=RequestContext(request))
不隶属于 StackOverflow