更新模板内变量的值 - django

Posted

技术标签:

【中文标题】更新模板内变量的值 - django【英文标题】:update value of a variable inside a template - django 【发布时间】:2012-07-04 16:58:07 【问题描述】:

我已经看到了足够多的示例,这些示例允许我在模板中声明一个新变量并设置它的值。但我想做的是更新模板中特定变量的值。

例如,我有一个对象的日期时间字段,我想根据模板中的request.user 添加时区。所以我将创建一个template filter 就像% add_timezone object.created % 一样,它会为object.created 添加时区,之后每当我访问object.created 时,它都会给我更新的值。

谁能告诉我如何做到这一点。我知道我需要从模板过滤器更新 context 变量。但是不知道怎么弄。

【问题讨论】:

到目前为止你尝试过什么?这是 ***,而不是 doalltheworkforme.com。 这样的逻辑真的不应该在模板中,你知道的。为什么不能在视图中执行此操作? 我不想在视图中这样做,因为查询集中可能有日期字段,然后我将不得不更改查询集中本身的属性。使用这个模板标签,我可以让它非常通用 【参考方案1】:

您不能修改模板中的值,但可以使用% with % 标签定义“范围”变量:

% with created=object.created|add_timezone %
    Date created with fixed timezone:  created 
% endwith %

add_timezone 是一个简单的过滤器:

def add_timezone(value):
    adjusted_tz = ...
    return adjusted_tz

register.filter('add_timezone', add_timezone)

【讨论】:

谢谢,这似乎是一个不错的解决方案,但有一个问题。如果有多个这样的对象,我将不得不使用很多 with 标签 你当然可以修改模板中的值,你只需要为此编写一个自定义的模板标签。 @Tisho Aha,这是一个有趣的区别。如果模板标签和过滤器“超出模板”,那么这里就没有太多事情发生了 实际上,即使使用模板标签或过滤器,您也无法修改模板中的变量。您只能使用它(在计算中使用、过滤它、在自定义 html 中呈现等)。但是,如果您在模板中再次使用它,该变量将具有相同的值。重用已更改变量的唯一方法是使用 %with% 作为范围变量,或者 - 是的 - 编写类似 % with % 的东西来保存变量状态。所以我使用上面的'值'而不是变量,也许这有点令人困惑......

以上是关于更新模板内变量的值 - django的主要内容,如果未能解决你的问题,请参考以下文章

Django - 来自模板标签内变量的字符串

在 django 模板中设置和重置变量的值

我将如何在 Django 模板标签中使用模板上下文变量的值? [复制]

Django 模板 - 增加变量的值

如何在 Django 2.1 中的模板内的 for 循环内设置变量?

从 django 中的视图更新模板标签的值