使用带空格的键
Posted
技术标签:
【中文标题】使用带空格的键【英文标题】:Using keys with spaces 【发布时间】:2010-12-16 03:31:12 【问题描述】:有没有办法在 Django 模板中执行以下操作?
% for hop in hops%
<tr>
<td> hop.name </td>
<td> hop.mass </td>
<td> hop."boil time" </td>
</tr>
% endfor %
跳跃。“煮沸时间”不起作用。简单的解决方案是重命名键煮沸时间,但我对替代品感兴趣。
【问题讨论】:
【参考方案1】:最好的方法是将属性名称偷偷带入另一个变量,如下所示:
% for key, value in hop.items %
% ifequal key 'boil time' %
value
% endifequal %
% endfor %
在 Django 0.96(Google AppEngine 使用的版本)中,模板语言不支持元组扩展,所以有点丑:
% for hop in hops %
<tr>
<td> hop.name </td>
<td> hop.mass </td>
<td>
% for item in hop.items %
% ifequal item.0 'boil time' %
item.1
% endifequal %
% endfor %
</td>
</tr>
% endfor %
因此,获取您的代码,我们最终得到:
% for hop in hops %
<tr>
<td> hop.name </td>
<td> hop.mass </td>
<td>
% for key, value in hop.items %
% ifequal key 'boil time' %
value
% endifequal %
% endfor %
</td>
</tr>
% endfor %
在 Django 0.96(Google AppEnginge 上的版本)中,变为:
% for hop in hops %
<tr>
<td> hop.name </td>
<td> hop.mass </td>
<td>
% for item in hop.items %
% ifequal item.0 'boil time' %
item.1
% endifequal %
% endfor %
</td>
</tr>
% endfor %
甚至还有更冗长的方法可以使用 regroup 标签:
% regroup hop.items by 'boil time' as bt %
% for item in bt %
% if forloop.first %
% for item2 in item.list %
% for item3 in item2 %
% if not forloop.first %
item3
% endif %
% endfor %
% endfor %
% endif %
% endfor %
【讨论】:
Django 模板语言不允许这样做。hop['boil time']
的模板语言等效为 hop.boil time
(我认为这是他遇到的问题)。
这是我在上面所做的评论的参考,表明.
符号涵盖了索引...docs.djangoproject.com/en/dev/ref/templates/api/…
我很欣赏写出所有代码的努力,但由于某种原因,它似乎对我不起作用,复制和粘贴事件。即使没有 ifequals,我也无法对字典进行迭代以打印任何键或值。
Dan,我实际上在我正在运行的一个实例上测试了代码,并且它在两种情况下都有效......我唯一能想到的是项目的问题。试着做一个 hop.items 看看会发生什么。如果字典覆盖了 items 方法,这可能会导致问题(例如,hop 具有“items”属性,然后尝试 hop.iteritems)
您可以通过在 main.py 中指定版本来在 Google App Engine 上实际使用 Django 1.0(或 1.1):code.google.com/appengine/docs/python/tools/…【参考方案2】:
您可以使用来自 djangosn-ps 的 get
过滤器:http://www.djangosnippets.org/snippets/1412/
(重命名密钥可能更好......)
【讨论】:
我会试一试,然后告诉你进展如何。 伙计,我做的 Ruby 太多了。我的倾向是monkeypatchdict
将下划线转换为空格...
我可能应该提到我在 google appengine 中使用 django 模板,而不是完整的 django 应用程序。似乎没有添加过滤器的简单方法。【参考方案3】:
对于 django 0.96,这是 Google Appengine 用于模板的,以下工作:
% for hop in recipe.get_hops %
% for item in hop.items %
% ifequal item.0 'boil time' %
<p> item.1 </p>
% endifequal %
% endfor %
% endfor %
item.0 是键,item.1 是值。 Link.
【讨论】:
以上是关于使用带空格的键的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JSONField 中使用 Postgres 在 Django 中搜索带有空格的键?