【问题标题】:Django regroup tag problemDjango重组标签问题
【发布时间】:2010-11-23 22:54:00
【问题描述】:

我有一个自定义过滤器 user_tz,它将用户作为参数。它在任何地方都可以正常工作,但是当我尝试在重组标签中使用此过滤器时,它会说用户不存在。

代码:

{% 通过 created_on|user_tz:user 将 proj_messages.object_list 重新组合为 proj_message_list %}

这是我得到的错误: 渲染时遇到异常:在 u"Today's tasks" 中查找 key [user] 失败。

谢谢, 马苏德·艾哈迈德

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    奇怪的是,即使我遇到了这个确切的问题。 虽然后来我不得不更改我的代码,但我无法得到它的解决方案。显然发生的情况如下。

    无论您在模板中编写什么,都会被拆分为节点、变量等。在渲染时,会在该实例可用的上下文中搜索变量。请注意,对于regroup 标签,可用的上下文就是您作为第一个参数传递的object_list不是通常的上下文(在您的情况下包含“用户”),它对整个模板都是全局的。因此,它无法找到您指定的任何其他变量,这不在您object_list .

    因此,在您的情况下,可用于重组的上下文是来自proj_messages.object_list 的对象。因此解析器代码能够在上下文中找到变量created_on,但不能找到user。这就是在这里抛出模板异常的原因。

    考虑到这一点,想象一下,如果您的object_list 也具有user 属性会发生什么。在这种情况下,不会有任何 KeyError, user 传递给过滤器,根本不是您打算传递的 user 变量。

    根据要求编辑: 没有直接的方法,将user 传递给重组标记中的过滤器这样的使用。但是一种 hack 显然会起作用。请注意,它只是一个黑客。使proj_messages.object_list 的每个实体/对象包含视图中的该用户变量,或使用模板中的 object_list 上的额外过滤器。 但比这更好的是,如果您希望 user 在任何地方都可用,从上下文之外,我希望您考虑另一个 hack。看看,http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser

    【讨论】:

    • 那么有什么方法可以将用户变量传递给我的过滤器?
    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多