【问题标题】:Can I use alias field names in django templates?我可以在 django 模板中使用别名字段名称吗?
【发布时间】:2010-02-03 11:30:30
【问题描述】:

我是 django 和 python 的新手...

我有一个模型,其中包括 10 个通用字段 attrib_00 到 attrib_09。

我将这些字段作为上下文传递给 django 模板字符串。

我想在模板中使用更有意义的名称。

模板字符串是从另一个模型中获取的,我想添加一个包含逗号分隔的关联别名列表的字段。这个想法是列表中的第一个别名映射到 attrib_00,第二个到 attrib_01...

我想我需要在渲染之前修改上下文,以便用别名替换通用键。

我在正确的轨道上吗?

有没有更好的办法?

谢谢, 埃德

附言

(添加评论按钮对我不起作用?)

我还没有任何代码。也许我应该解释一下我想要实现的目标......

我有一个用 delphi 编写的现有应用程序,它可以帮助我维护大量 ebay 列表,我想将其模拟为 django/python 网络应用程序。

每个产品/listing 都属于一个类别,每个类别都有一组属性。例如,裤子可能有颜色、腰围尺寸和腿长。每个类别的属性数量和类型各不相同,但从不超过 10 个。

我可以看到例如 attrib_00 如何在一个类别中用于大小,在另一个类别中说金属,但随后会被困在模板中使用通用字段名称。

仅供参考:- 我想我会在视图中进行任何循环,并在返回响应之前多次调用渲染过程?

【问题讨论】:

  • 贴一些代码!你是怎么拿到琴弦的?你如何将它们传递给上下文?

标签: django django-templates


【解决方案1】:

我会说在从视图传递到模板之前在上下文中创建别名。大致如下:

c = Context({'foo': attrib_01, 'bar': attrib_02, ...})

您可以将其插入一个新函数中,这样您就不会破坏 DRY 并且一切顺利。

更新:
至于在模板中实际映射它,并没有那么多。模板毕竟只是一个模板。唯一接近像您想的那样工作的是{% with %} 块:

{% with attrib_01 as foo %}
   <div class="foo">{{ foo }}</div>
{% endwith %}

它可能会起作用,但我担心它会变得相当难看。

【讨论】:

  • 这完全符合我的想法,只有你解释得比我好得多。 ;o) 但是由于模板与类别一一对应,我想知道/希望它们是否是在模板中定义别名的一种方式?
  • 为您添加了一些关于{% with %} 块的信息。
  • 是的,我知道那会是多么混乱。我会坚持你的第一个建议。非常感谢,埃德。
【解决方案2】:

使用翻译怎么样?

attrib_00 = models.TextField(_('attrib_00'), blank=True, null=True)

然后根据需要对 attrib_00 进行不同的翻译。

【讨论】:

  • 还不知道翻译,谢谢提及,现在研究一下。
猜你喜欢
  • 2019-10-12
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 2023-02-08
相关资源
最近更新 更多