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

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

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

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

【问题讨论】:

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

标签: django django-templates django-template-filters


【解决方案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 %} 的东西来保存变量状态。所以我使用上面的'值'而不是变量,也许这有点令人困惑......
猜你喜欢
  • 1970-01-01
  • 2020-12-07
  • 2010-10-17
  • 2016-11-29
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多