【发布时间】:2019-01-15 14:35:03
【问题描述】:
上下文
我正在尝试使用 django 模板引擎使用上下文中的变量来呈现页面的可翻译部分。具体来说,这是我的用例
{% blocktrans trimmed with type=training.type title=training.title city=training.city %}
Training {{ type }} "{{ title }}" at {{ city }}
{% endblocktrans %}
这很好用,但是,我的问题是 blocktrans 长度增长得非常快,超过了可接受的范围(至少对我而言)。
作为替代,我可以这样做
{% with training.title as title %}
{% with training.type as type %}
{% with training.city as city %}
{% blocktrans trimmed %}
Training {{ type }} "{{ title }}" at {{ city }}
{% endblocktrans %}
{% endwith %}
{% endwith %}
{% endwith %}
或者使用一个单独的 with 子句。
但这并不能真正简化该代码的可读性,尤其是当有更多变量要暴露给翻译字符串时。
我想到的解决方案
我最初的想法是将blocktrans标签扩展到几行:
{% blocktrans trimmed with
type=training.type
title=training.title
city=training.city %}
Training {{ type }} "{{ title }}" at {{ city }}
{% endblocktrans %}
不幸的是,django 不支持模板中的多行标签。
(有关原因,请参阅 django mailing list 上相当冗长的讨论)。
问题
由于我在上述讨论中没有找到解决方案,我正在寻找一种方法来获得与我的第一个代码中相同的结果,而不会因为过长的行/大块 with 而妨碍我的模板可读性标签。
我曾考虑将该代码放在其他地方,例如 training 所基于的模型中的 @property 方法。但在我看来,该逻辑属于模板,(它不太可能在其他任何地方使用)。
在 django 中是否有另一种惯用的方式来实现这一点?
【问题讨论】:
-
也许这就是解决方案?我不确定它是否有效...
{% blocktrans trimmed with t=training %} Training {{ t.type }} "{{ t.title }}" at {{ t.city }} {% endblocktrans %} -
很遗憾它不起作用^.
标签: django django-templates internationalization readability django-context