django模板过滤器

django模板过滤器,django,templates,Django,Templates,我有这种情况 {%if 1 | floatformat在'7,10%} 对 {%else%} 不 {%endif%} 返回结果总是设置为“是”,如何使结果返回“否” 请帮忙。 谢谢1 | floatformat返回1,条件检查1是否在'7,10'中,因为django将'7,10'视为一个字符串,它返回True。尝试传递一个列表,它将返回no很难从您的示例中看出这里到底发生了什么,因为您正在用虚拟数据替换数据库中真正出来的数据 如您所写,结果将始终为“是”,因为字符串“7,10”包含字符串“1”

我有这种情况

{%if 1 | floatformat在'7,10%} 对 {%else%} 不 {%endif%}

返回结果总是设置为“是”,如何使结果返回“否” 请帮忙。
谢谢

1 | floatformat
返回
1
,条件检查
1
是否在
'7,10'
中,因为django将
'7,10'
视为一个字符串,它返回True。尝试传递一个列表,它将返回no

很难从您的示例中看出这里到底发生了什么,因为您正在用虚拟数据替换数据库中真正出来的数据

如您所写,结果将始终为“是”,因为字符串“7,10”包含字符串“1”

听起来你想要达到的目标是:

如果此号码在此列表中,则为是,否则为否

因此,让我们重写此模板,使其更加真实:

{% if mynumber in yeslist %} yes {% else %} no {% endif %}
这假定:

  • mynumber是一个数字
  • yeslist是一个数字列表
我不确定你在这种情况下使用floatformat做什么

如果上述断言不正确,并且您必须使用字符串,那么您的工作将更加困难,您应该处理yeslist服务器端。例如,如果yeslist只是一个类似“7,10123,93,9,19,83”的字符串,那么在模板中确定数字
8
是否在列表中将是不必要的困难。在您看来,这样做要容易得多:

def myview(request):
    ctx = {}
    # ... do some work ...
    # yeslist now has a string like "7,10,123,93,9,19,83"
    ctx['yeslist'] = yeslist.split(',')
    # ... do more work, and render the response ...

现在,
{%if'8'在yeslist%}
将不再返回假阳性,因为它不是做子字符串匹配,而是做列表成员。

很抱歉,我必须澄清,“7,10”是数据库查询的结果,它的值是7,10(带分隔逗号的数字),谢谢Idan Gazit,这正是我的意思。我会试试你对这件事的解决办法。谢谢。如果你觉得我的帖子对你有帮助,那么请投赞成票或接受它!