Python 如何检查从flask传递到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>

我是网络开发新手。我正在将一个列表对象(“结果”)从flask传递到我的html模板。我想检查传入html文档的变量是否都是数字。我怎么检查这个

<!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