我正在通过Django呈现HTML表格。在这个表中,一些单元格或列包含由我的python代码生成的“0”。
HTML中是否有任何方法可以覆盖该单元格或列,而在表格单元格中显示空白而不是0?
我也在使用jQuery,如果有帮助的话。
<tr><td> Value</td>
{% for num in list %}
<td> <b>{{num}}</b>
{% endfor %}</td>
</tr>
输出是一个包含3个零的列表...其中我想要两个消隐。
让我们说如果我有什么东西被归还
0
10
0
20
0
但想要
""
10
""
20
0
$(".dem").each(function() {
for ( var i = 0; i<2; i++)
{
if ($(this).html() == "0") {
$(this).html(" ");
}
i = i+1
}
});
我做了那个^ ....但是它将所有3个零空白...为什么? 谢谢!
答案 0 :(得分:2)
如果零是唯一评估为false的内容,则可以使用default
模板过滤器:
{{ value|default:" " }}
您可能需要使用实际的unicode字符
{{ value|default:"\u00A0" }}
回复您的修改:
<tr><td> Value</td>
{% for num in list %}
<td> <b>{{ num|default:"\u00A0" }}</b>
{% endfor %}</td>
</tr>
仅更改第一行:
<tr><td> Value</td>
{% for num in list %}
<td> <b>{% if forloop.first %} {% else %}{{ num }}{% endfor %}</b>
{% endfor %}</td>
</tr>
有关forloop变量的更多信息,check here。
答案 1 :(得分:2)
请参阅最后一次编辑以获得最终答案。我将其余部分留下来表明提出一个好问题是多么重要,并展示what was tried,输入的内容以及预期的输出应该是什么。这样可以节省很多时间。
使用jQuery,您可以迭代每个表格单元格,检查值并更改它输出的内容。我更喜欢改变实际数据。最好保留数据完整,只改变它在这里的显示方式。
$("#test td").each(function() {
if ($(this).html() == "0") {
$(this).html("");
}
});
您可以在行动here中看到它。
<强>更新强>
如果只应更改某些<td>
,我建议使用类。
$(".noZeroAllowed").each(function() {
if ($(this).html() == "0") {
$(this).html("");
}
});
它适用于HTML:
<table id="test">
<tr>
<td class="noZeroAllowed">10</td>
<td class="noZeroAllowed">5</td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td class="noZeroAllowed">11</td>
<td class="noZeroAllowed">0</td>
<td>9</td>
<td>7</td>
</tr>
</table>
更新2 :
如果数据不是原子数据,并且单元格中有多个值,请执行以下操作:
<table id="test">
<tr>
<td class="noZeroAllowed">10 0 foobar 0</td>
<td class="noZeroAllowed">5</td>
<td>0, 0, 0</td>
<td>1</td>
</tr>
</table>
然后,您需要更改Javascript以使用正则表达式。 \b
表示单词边界。它不适用于像0.5
这样的小数。
$(".noZeroAllowed").each(function() {
var newStr = $(this).html().replace(/\b0\b/g, "");
$(this).html(newStr);
});
请参阅updated fiddle。
更新3:
这会将相关类<b>
中<td>
标记内的所有零变为空字符串,但保留最后一个零。
$(".noZeroAllowed").each(function() {
var zeros = new Array;
var b = $(this).find("b");
for (var i = 0; i < b.length; i++) {
$(b[i])
if ($(b[i]).html() == "0") {
zeros.push(b[i]);
}
}
for (var i = 0; i < zeros.length - 1; i++) {
$(zeros[i]).html("");
}
});
见here。
答案 2 :(得分:0)
您可以使用Django的模板(请参阅documentation):
{% if val != 0 %}{{ val }}{% endif %}
或者,如果你想要更整洁的东西,你可以在模板中使用Django 过滤器:
{{ val | default: "" }}
......科林打败了那个人。 ;)参见documentation for the 'default' filter。
编辑:在回答您的评论时,您可以这样做:
{% for num in list %}
<td><b>{{num | default: ""}}</b></td>
{% endfor %}
请注意,你的</td>
在外面是for循环,而它需要在里面。