Python 如何将变量传递给django中的所有模板?
我正在尝试将变量(浏览器变量)传递到我应用程序中的所有模板。关于如何让它工作有什么建议吗 视图: 模板:Python 如何将变量传递给django中的所有模板?,python,django,templates,view,base,Python,Django,Templates,View,Base,我正在尝试将变量(浏览器变量)传递到我应用程序中的所有模板。关于如何让它工作有什么建议吗 视图: 模板: {% for prod in browser %} {{ prod }}, {% endfor %} 目前,您正在将locals()作为变量范围传递,该变量范围还应包括browser,但我发现locals()的用法非常难看 就我个人而言,我总是喜欢这样的模式: def browser(request): context = RequestContext(request)
{% for prod in browser %} {{ prod }}, {% endfor %}
目前,您正在将
locals()
作为变量范围传递,该变量范围还应包括browser
,但我发现locals()
的用法非常难看
就我个人而言,我总是喜欢这样的模式:
def browser(request):
context = RequestContext(request)
primary_cat_list = Categories.objects.order_by("category")
subcat_list = SubCategories.objects.order_by("sub_category")
product = Productbackup.objects.order_by("website")
browser = list(chain(primary_cat_list, subcat_list, product))
context['browser'] = browser
return render_to_response('reserve/templates/base.html', context_instance=context)
我的朋友,您正在寻找上下文处理器。 出自一位比我更敏捷、更博学的技术作家之手: 什么是模板上下文处理器? Django的上下文处理器是一种工具,允许您向模板提供数据和回调 您可以通过以下两种方式之一执行此操作:
- 基于单个请求:通过将自定义的
值传递给您的上下文
调用render\u to\u response()
- 全局:通过创建上下文处理器方法,该方法接受
对象作为输入,并返回有效负载或回调,然后 在HttpRequest
中注册上下文处理器,然后使用内置的settings.py
属性提供RequestContext
调用 而不是您自己的(当然,您可以随时扩展render\u to\u response()
以根据单个请求添加更多数据)RequestContext
这里的结论是:上下文处理器就是一个很好的例子。是的。我可以给你一个代码示例,效果很好。下面是名为
context\u processors.py的文件:
上下文处理器.py
这就是我的base.html(我在所有页面上使用的模板)的一部分
base.html
{%if user.username%}
欢迎{{user.username}
这似乎不起作用……base.html仍然没有显示任何内容。@sharataka:在这种情况下,列表可能只是空的?如果您这样做会怎么样:browser=['spam','eggs']
?我不确定这是否与此有关,但奇怪的是,您的函数名为browser
,并且您还分配了一个名为browser
的变量。我在python shell中做了一些实验,这似乎不是问题所在,但您可能希望对其进行更改以减少混淆。另外,请确保列表不是空的。尝试使用调试器或在视图中打印值。而且,您是否真的想知道如何在所有模板中显示变量,或者在这种情况下,浏览器
变量为什么不工作?@BrianNeal我最初想知道为什么浏览器变量没有传递到base.html。这将有效地允许我在所有模板中使用变量,这正是我想要做的。这不是OP要求的吗?。。。我倾向于同意个人层面的观点,因为我通常不这样工作。但我不能肯定这两种方式,所以最好把它作为程序员的冒险,这种教育经历远远超过了我所能做出的任何评论。不管怎样,这就是为什么我在最后添加了¨,因为Q听起来像是在探索框架和解决特定的技术问题。
def browser(request):
context = RequestContext(request)
primary_cat_list = Categories.objects.order_by("category")
subcat_list = SubCategories.objects.order_by("sub_category")
product = Productbackup.objects.order_by("website")
browser = list(chain(primary_cat_list, subcat_list, product))
context['browser'] = browser
return render_to_response('reserve/templates/base.html', context_instance=context)
def base(request):
user = request.user
#======================
#Login form
#=====================
# here is the code for login user or check if he is logged in already
return {
'user': user,
}
{% if user.username %}
<h3>
Welcome {{ user.username }}
</h3>