我想使用ifnotequal标记来判断变量是否等于某个值。这是代码:
{% ifequal firewall.to_port 22 %} <td>Ssh Service</td>{% endifequal %}
{% ifequal firewall.to_port 80 %} <td>Web Service</td>{% endifequal %}
{% ifequal firewall.to_port 25 %} <td>Mail Service</td>{% endifequal %}
{% ifnotequal firewall.to_port 80 or 22 or 25 %} <td>Unknown Service</td>{% endifnotequal %}密码是错的。我不知道如何在or标记中使用ifnotequal。我该怎么写这个?非常感谢。
最后,我使用:
{% ifequal firewall.to_port 22 %} <td>Ssh Service(Port 22)</td>{% endifequal %}
{% ifequal firewall.to_port 80 %} <td>Web Service(Port 80)</td>{% endifequal %}
{% ifequal firewall.to_port 25 %} <td>Mail Service(Port 25)</td>{% endifequal %}
{% if firewall.to_port != 25 and firewall.to_port != 22 and firewall.to_port != 80 %}
<td>Unknows Service</td>{% endif %}这看起来很蠢。
发布于 2014-06-30 07:52:04
一种方法是使用if模板标记而不是ifequal。它可以有多个elif子句,如果没有使用elif子句,则可以使用一个最终的elif子句。例:
{% if firewall.to_port==22 %} <td>Ssh Service</td>
{% elif firewall.to_port==80 %} <td>Web Service</td>
{% elif firewall.to_port==25 %} <td>Mail Service</td>
{% else %} <td>Unknown Service</td>{% endif %}根据to_port调用的工作方式,您可能需要与字符串而不是整数进行比较。
在查看上面评论中的重复链接时,我看到有人已经建议了这种方法。这不是唯一的选择,但是如果您不想改变视图/模型实例的行为,它就会工作。
发布于 2014-06-30 07:52:52
在将对象发送到模板之前,在视图中这样做对性能来说更容易也更好:
def some_view(request):
port_names = {22: 'SSH Service', 80: 'Web Service', 25: 'SMTP Service'}
firewall_objects = Firewall.objects.all()
object_list = []
for firewall in firewall_objects:
object_list.append((firewall,
port_names.get(firewall.to_port, 'Unknown Service')))
return render(request, 'template.html', {'object_list': object_list})在你的模板中,你的生活很简单:
<ul>
{% for obj, description in object_list %}
<li>{{ obj.to_port }} - {{ description }}</li>
{% endfor %}
</ul>https://stackoverflow.com/questions/24485164
复制相似问题