Python 如何检查从flask传递到html文件的变量是否为特定类型(例如字符串、整数)
我是网络开发新手。我正在将一个列表对象(“结果”)从flask传递到我的html模板。我想检查传入html文档的变量是否都是数字。我怎么检查这个Python 如何检查从flask传递到html文件的变量是否为特定类型(例如字符串、整数),python,html,flask,Python,Html,Flask,我是网络开发新手。我正在将一个列表对象(“结果”)从flask传递到我的html模板。我想检查传入html文档的变量是否都是数字。我怎么检查这个 <!DOCTYPE html> <html> <head> </head> <body> <center> <h1> Your Results </h1> </center>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<center>
<h1>
Your Results
</h1>
</center>
<ol>
{% for result in results %}
<li>
<ul>
{% for entry in result %}
<li> {{ entry }} </li>
{% endfor %}
</ul>
<br>
</li>
{% endfor %}
</ol>
</body>
</html>
你的结果
{结果中的结果为%}
{result%%中条目的%s}
- {{entry}}
{%endfor%}
{%endfor%}
使用isinstance
:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<center>
<h1>
Your Results
</h1>
</center>
<ol>
{% for result in results %}
<li>
<ul>
{% for entry in result %}
{% if isinstance(entry, int) or isinstance(entry, float) %}
<li> {{ entry }} </li>
{% else %}
<li> WAS NOT AN NUMBER! </li>
{% endfor %}
</ul>
<br>
</li>
{% endfor %}
</ol>
</body>
</html>
结果:
真的
False使用
isinstance
:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<center>
<h1>
Your Results
</h1>
</center>
<ol>
{% for result in results %}
<li>
<ul>
{% for entry in result %}
{% if isinstance(entry, int) or isinstance(entry, float) %}
<li> {{ entry }} </li>
{% else %}
<li> WAS NOT AN NUMBER! </li>
{% endfor %}
</ul>
<br>
</li>
{% endfor %}
</ol>
</body>
</html>
结果:
真的
False您必须在
app.py
文件中执行任何类型检查
根据上面的代码,您似乎想查看结果中每个条目的类型,对吗?如果是这样的话,你可以用两种方法。由于您是初学者,您可以尝试一些简单的打印调试,例如,在生成结果列表后,您可以在app.py中执行以下操作:
for entry in results:
print(entry, type(entry))
将每个元素及其类型打印到终端。您还可以编写一个函数,对整个结果对象执行布尔检查:
def numeric_check(results):
for entry in results:
if isinstance(entry, int) or isinstance(entry, float):
# note there is also a 'complex' numeric type and (in python 2.x) a 'long' type
pass
else:
return False
return True
然后,您可以打印(数字检查(结果))
以在终端中查看结果
如果要确保每个元素都是数字而不进行显式检查,可以尝试使用列表理解将列表中的每个元素强制为数字,如下所示:
results = [int(entry) for entry in results]
# note you could also use 'float' as necessary
但您将遇到问题,即如果Python无法强制其中一个元素为数值,则会引发异常并中断应用程序
有不同的方法可以做到这一点,并使用库numpy
在类似数组的对象中强制执行类型,但这对您来说可能有点高级 您必须在app.py
文件中执行任何类型检查
根据上面的代码,您似乎想查看结果中每个条目的类型,对吗?如果是这样的话,你可以用两种方法。由于您是初学者,您可以尝试一些简单的打印调试,例如,在生成结果列表后,您可以在app.py中执行以下操作:
for entry in results:
print(entry, type(entry))
将每个元素及其类型打印到终端。您还可以编写一个函数,对整个结果对象执行布尔检查:
def numeric_check(results):
for entry in results:
if isinstance(entry, int) or isinstance(entry, float):
# note there is also a 'complex' numeric type and (in python 2.x) a 'long' type
pass
else:
return False
return True
然后,您可以打印(数字检查(结果))
以在终端中查看结果
如果要确保每个元素都是数字而不进行显式检查,可以尝试使用列表理解将列表中的每个元素强制为数字,如下所示:
results = [int(entry) for entry in results]
# note you could also use 'float' as necessary
但您将遇到问题,即如果Python无法强制其中一个元素为数值,则会引发异常并中断应用程序
有不同的方法可以做到这一点,并使用库numpy
在类似数组的对象中强制执行类型,但这对您来说可能有点高级 我有点晚了,但是如果你想检查你的html,你可以尝试创建一个定制的烧瓶过滤器。在app.py文件中,定义app变量后,键入此选项
def check_type(stuff, types):
if type(stuff) == type(types):
return True
return False
app.jinja_env.filters['check_type'] = check_type
然后在html文件中,您可以执行以下操作
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<center>
<h1>
Your Results
</h1>
</center>
<ol>
{% for result in results %}
<li>
<ul>
{% for entry in result %}
{% if entry | check_type(1) or entry | check_type(1.1) %}
<li> {{ entry }} </li>
{% else %}
<li> WAS NOT AN NUMBER! </li>
{% endfor %}
</ul>
<br>
</li>
{% endfor %}
</ol>
</body>
</html>
你的结果
{结果中的结果为%}
{result%%中条目的%s}
{if entry | check_type(1)或entry | check_type(1.1)%}
- {{entry}}
{%else%}
- 这不是一个数字李>
{%endfor%}
{%endfor%}
这应该管用,它对我管用;顺便说一句,我使用的是python 3.8,我有点晚了,但是如果你想检查你的html,你可以尝试创建一个定制的flask过滤器。在app.py文件中,定义app变量后,键入此选项
def check_type(stuff, types):
if type(stuff) == type(types):
return True
return False
app.jinja_env.filters['check_type'] = check_type
然后在html文件中,您可以执行以下操作
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<center>
<h1>
Your Results
</h1>
</center>
<ol>
{% for result in results %}
<li>
<ul>
{% for entry in result %}
{% if entry | check_type(1) or entry | check_type(1.1) %}
<li> {{ entry }} </li>
{% else %}
<li> WAS NOT AN NUMBER! </li>
{% endfor %}
</ul>
<br>
</li>
{% endfor %}
</ol>
</body>
</html>
你的结果
{结果中的结果为%}
{result%%中条目的%s}
{if entry | check_type(1)或entry | check_type(1.1)%}
- {{entry}}
{%else%}
- 这不是一个数字李>
{%endfor%}
{%endfor%}
这应该管用,它对我管用;顺便说一下,我正在使用python 3.8