0

我有一个 Python for 循环,可以打印 1 到 20 个输出。我正在构建一个 web 应用程序(Flask / Heroku),并且我想显示每个输出,因为它打印在我的 HTML 页面上的循环中。所以我的 HTML 页面看起来像这样(每个输出都是单独打印的)......

Checking...
    output 1: not valid
    output 2: not valid
    output 4: not valid
    output 5: valid!

通常,我只会将许多变量传递到我的 HTML 页面中:

@app.route('/')
def hello():
    return render_template("main.html", output = output)

但是对每个打印的输出都这样做是没有意义的,因为我会多次调用 HTML 页面。这是我的for循环以防万一:

p = [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13]
e = iter(p)

# run validation logic
 print "Checking..."
    for x in e:
        i = x+"@"+d
        has_mx = validate_email(i,check_mx=True)
        is_real = validate_email(i,verify=True)

        if (has_mx == False):
            print "no mx record"
            break
        elif (is_real and x == p0):
            print "catchall detected"
            break
        elif (x != p0):
            if is_real:
                print i, "probably valid" 
                break
            else:
                print i, "not valid"
4

1 回答 1

1

您不必多次调用该页面 - 您只需要使用Flask 的模板引擎 (Jinja2) 来呈现您的输出。像这样的东西:

{# in validation.html #}
<ul>
{% for value, is_valid, validity_message in data %}
    <li>{{ value }}: {{ validity_message }}</li>
{% endfor %}
</ul>

这将生成一个无序列value: validity_message对的列表:

<ul>
    <li>A: probably valid</li>
    <li>B: no mx record</li>
    <!-- ... etc. ... -->
</ul>

其他一些建议:

  • 使用描述性变量名称。现在对您来说很明显did 是一个域,但从现在起六个月后,它可能不会了。
  • 无需调用iter列表 - 只需遍历列表本身。

重做代码:

def validate_emails(names, domain, catchall):
    # run validation logic
    for name in names:
        email = name + "@" + domain
        has_mx = validate_email(email, check_mx=True)
        is_real = validate_email(email, verify=True)
        is_catchall = name == catchall

        if not has_mx:
            yield name, False, "no mx record"
            break
        elif is_real and is_catchall:
            yield name, False, "catchall detected"
        elif is_real and not is_catchall:
            yield email, True, "probably valid" 
        else:
            yield email, False, "not valid"

然后你可以像这样使用它:

messages = validate_emails(["a", "b", "c"], "somedomain.com", "sales")
return render_template("validation.html", data=messages)
于 2013-10-13T12:30:25.980 回答