【发布时间】:2014-08-28 13:43:44
【问题描述】:
我有一个自定义上下文处理器,它将一些服务器端常量传递给客户端(通过注入 javascript 对象)。某些视图可能希望向字典添加额外的参数,例如通知。
from django.contrib.sites.shortcuts import get_current_site
def client_context(request):
params = {}
domain = get_current_site(request).domain
schema = request.scheme
params['rooturl'] = "%s://%s" % (schema,domain)
return {'params': params}
根据docs
应用上下文处理器时
上下文处理器在上下文本身被处理后应用。这意味着上下文处理器可能会覆盖您提供给上下文的变量或 RequestContext,因此请注意避免与 那些由你的上下文处理器提供的。
如果我在不覆盖 params 的情况下呈现模板,它工作正常 - 我在模板中获得了 baseurl。
如果我使用名为 params 的变量渲染模板,我只会得到覆盖的值。
def home(request):
return render(request, 'home.html', { 'params' : {'page' : 'home'} })
所以我有两个问题
django 文档不正确吗?据我了解,第二个 dict 应该
update第一个。根据这些发现我 首先应用自定义上下文。实现这一目标的最佳方法是什么?
编辑
在我的base.html 文件(由所有其他模板扩展)中,我将params 对象传递给一个Js 对象。例如
{% block init %}
<script>
Global = new Global( {{ params | json }} );
</script>
{% endblock %}
我希望有一个不需要按名称添加每个可能参数的解决方案
{% block init %}
<script>
Global = new Global( { baseurl : "{{baseurl}}", page : "{{ page }}" );
</script>
{% endblock %}
【问题讨论】:
标签: django