0

Pocoo-Flask 内で、以下のようなテンプレート内でメソッドを定義して使用するにはどうすればよいですか? 私は Python とそれに続く言語の Web フレームワークに全体的に慣れていません。

{%
import socket

def DoesServiceExist(host, port):
    try:
        captive_dns_addr = socket.gethostbyname(host)
    except:
        pass

    try:
        host_addr = socket.gethostbyname(host)

        if (captive_dns_addr == host_addr):
            return False

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1)
        s.connect((host, port))
        s.close()
    except:
        return False

    return True
%}
{% if DoesServiceExist("google.com", 80) %}
    <h1>Hello {{ name }}!</h1>
4

1 に答える 1

4

ビューで関数を実行するのではなく (可能です。これらは jinja2 ではフィルターと呼ばれます)、より良い解決策は、ビュー関数でテンプレートに成功/失敗変数を与え、その失敗に基づいてテンプレートの動作を変更することです。 .

def DoesServiceExist(host, port):
    try:
        captive_dns_addr = socket.gethostbyname(host)
    except:
        pass

    try:
        host_addr = socket.gethostbyname(host)

        if (captive_dns_addr == host_addr):
            return False

        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(1)
        s.connect((host, port))
        s.close()
    except:
        return False

    return True

@app.route("/some_url")
def some_urls_view():
    ServiceExists = DoesServiceExist(host, port)
    name = getname() #I don't know what name is but you'll have to pass it to the template
    return render_template("some_template", ServiceExists=ServiceExists, name=name)

次に、jinja2 テンプレート (この場合は「some_template」という名前) で

{% if ServiceExists %}
    <h1>Hello {{ name }}!</h1>
{% else %}
    <h1>Hello!</h1>
{% endif %}

render_template に渡すすべてのキーワード引数は、レンダリング時にテンプレートでグローバルに使用できます。

于 2013-09-14T04:37:49.127 に答える