django - 如何将数据从 Django 中的任何 View 传递到任何模板?

标签 django django-templates django-views

就像一个优秀的小程序员一样,我的所有 Django 模板都继承自 base.html。现在我想在基础上添加一些功能,以始终显示一些有趣的东西。一些用户统计数据,或随机帖子,或提要等。

我所有的观点都是这样的:

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

如何才能使 template_values 的值始终填充到我的所有 View 中?我是否必须在所有观点的开头都这样做?如:

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/templates/api/

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

在我的 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",)

我添加的第一个定义了 View 的规范 URL,第二个在 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"

关于django - 如何将数据从 Django 中的任何 View 传递到任何模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1071572/

相关文章:

django - 在 Django 注销内置 View 中添加 extra_context

django - 成功登录后如何向 Django 的响应上下文添加内容?

javascript - Django 检查 JavaScript 是否开启

django - 如何在 DeleteView 中访问相关的对象 ID

django - 如何在 django 中生成标准化模型实例模板代码?

Django 表单; 'bool' 对象没有属性 'get'

django - 如何在基于类的 View django 中过滤对象

javascript - 将变量从 javascript 传递到 django 模板

python - 如何在 views.py 中创建模型实例?

include 模板标签中的 Django 变量替换