【发布时间】:2012-03-07 09:08:14
【问题描述】:
我正在尝试连接两个数字以作为参数传递给包含的模板。
特别是,在下面的代码中,我试图为“divnum”传递一些东西
我看了: How can I concatenate forloop.counter to a string in my django template
并认为下面的代码可以工作,但它仍在添加类似的数字! (例如,我在想要“11”的地方得到“2”)
<div id="{{ forloop.counter }}graph" style="display:none; padding: 1em, 0;margin: 1em, 0;">
{% with x=forloop.counter|stringformat:"s" %}
{% include 'graph-div.html' with divnum="1"|stringformat:"s"|add:x width="50%" question=response.question title="Nationwide" %}
{% endwith %}
</div>
如何将这些数字连接为字符串?
文档中有一条警告说: 可以强制转换为整数的字符串将被求和,而不是连接,就像上面的第一个示例一样。
所以我可以不做吗?似乎如果有警告,那么他们就知道这是一个问题,并且应该在某个地方有解决方案......
【问题讨论】:
-
这不是问题,这只是python的工作方式,并且鉴于模板过滤器是从左到右解析的,您正在设置一个数字(1),将其转换为字符串(“1”)并将你的 forloop 计数器添加到它,给你一个整数。如果可能(或在视图中完成),模板中的这种复杂逻辑可能更适合模板标签
-
我想“问题”是指“程序员想做而他们不能做的事情”。我尽量避免在视图中做这样的小事情,因为它增加了复杂性(我认为)一个不好的原因,但听起来我必须这样做,或者找到另一种解决方法。
-
听起来是模板标签或过滤器的好理由。它还将使将来的内容更易于阅读和维护。您到底想在代码中做什么以及包含的模板中有什么?
-
我基本上只是想分配不同的 id——所以我有许多“图形”div,每个里面都有两个“图表”div(包含文件的内容) .我有一个函数可以渲染图形并获取要渲染到的 div 的 id。一位同事指出,由于它们只需要不同,我可以使用“a1”而不是“11”,所以这就是我现在正在做的。
-
您有实际的
Chart对象吗?如果是这样,您可以简单地将它们的主键用作您的 css 的不同 id,因为它们将始终是不同的:<div id="chart-{{ curr_chart.id }}">