10

我正在尝试将变量(浏览器变量)传递给我的应用程序中的所有模板。关于如何让它工作的任何建议?

看法:

def browser(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))
    return render_to_response('reserve/templates/base.html', locals(), context_instance=RequestContext(request))

模板:

{% for prod in browser %} {{ prod }}, {% endfor %}
4

3 回答 3

14

你,我的朋友,正在市场上购买上下文处理器。

从一个比我更敏捷和博学的技术作家写的博客文章中:

什么是模板上下文处理器?

Django 的上下文处理器是一种允许您向模板提供数据和回调的工具。

您可以通过以下两种方式之一执行此操作:

  • 根据个人请求:通过将自定义Context值传递给您的render_to_response()调用
  • 全局:通过创建一个接受HttpRequest对象作为输入并返回有效负载或回调的上下文处理器方法,然后在settings.py您的.当然,根据个人请求添加更多数据)。render_to_response()RequestContextRequestContext

如果将数据传递给模板的这种方法对您来说听起来很荒谬且令人困惑,那么您并不孤单。如此简单的操作所涉及的复杂性是没有根据的,而且会适得其反,但每个系统都有其缺点。

官方文档在这里:

https://docs.djangoproject.com/en/dev/ref/templates/api/

所以,但是,是的,我已经用 Django 编程了一段时间,我真正喜欢用它来解决问题的原因之一是它的复杂性几乎是拜占庭式的,但不是以一种霸道的方式。它有很多可能不会立即看起来有用的东西。当您需要它们时,它们中的每一个都非常方便,如果不需要,它将不会妨碍您。

这里给你的结果是:上下文处理器就是一个很好的例子。是的。

于 2012-08-20T00:49:50.000 回答
4

目前你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)
于 2012-08-19T23:02:42.833 回答
4

我可以给你一个我的代码示例,它工作正常。这是名为的文件context_processors.py

context_processors.py

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,
        }

那就是我的 base.html 的一部分(我在所有页面中都使用的模板)

base.html

{% if user.username %}
                    <h3>
                        Welcome {{ user.username }}
                    </h3>
于 2012-08-20T02:54:47.477 回答