2017-12-15 7 views
1

フラスコアプリに更新していないし、それが正常に動作します:変数は、私は(自分のために学習運動として)この小さなものを構築している

import urllib.request 

url = "http://www.google.com" 
print_result = "" 
def is_google_down(): 
    try: 
     result = urllib.request.urlopen(url).getcode() 
     if result == 200: 
      print_result = "google.com is fine" 
     else: 
      print_result = "google.com is down" 
    except urllib.error.HTTPError as e: 
     print_result = "google.com is down" 
    print(print_result) 
is_google_down() 

をだから今、私はフラスコアプリに変換しようとしているので、I結果を中心にWebページを構築することができます。

from flask import Flask, render_template 
import urllib.request 
app = Flask(__name__) 

@app.route("/") 
def is_it_down(): 
    url = "http://www.google.com" 
    print_result = "not working" 
    def is_google_down(): 
     try: 
      result = urllib.request.urlopen(url).getcode() 
      if result == 200: 
       print_result = "google.com is fine" 
      else: 
       print_result = "google.com is down" 
     except urllib.error.HTTPError as e: 
      print_result = "google.com is down" 
     print(print_result) 
    is_google_down() 
    return render_template("is_it_down.html", result=print_result) 

if __name__ == "__main__": 
    app.run(debug=True) 

を、私は私のWebページを更新すると、私はちょうどprint_resultが元々に設定されているものである「動作しない」テキストを取得します。なぜ更新していないのですか?

答えて

1

内部機能はprint_resultを返す必要があります。

回答:

print_result = is_google_down() 
return render_template("base.html", result=print_result) 

またはアンサー:

あなたはis_google_down機能を必要としません。そしてその機能さえほとんど何も返されないので、それを取り除くだけです。

app.py

@app.route("/") 
def is_it_down(): 
    url = "http://www.google.com" 
    print_result = "not working" 
    try: 
     result = urllib.request.urlopen(url).getcode() 
     if result == 200: 
      print_result = "google.com is fine" 
     else: 
      print_result = "google.com is down" 
    except urllib.error.HTTPError as e: 
     print_result = "google.com is down" 
    return render_template("is_it_down.html", result=print_result) 

is_it_down.html

{{ result }} 
+0

ありがとうございます。私は不必要な仕事をたくさんしていたように思えました。本当にありがとうございます – rlou

+0

これがうまくいけばそれを受け入れてください。ありがとうございました –

0

短い答え:

あなたはnonlocalステートメントを使用する必要があります。

長い答え:

Pythonはそれらが(機能is_it_downis_google_down内部の)二つの異なるスコープで宣言されているようprint_resultという名前の2つの変数が、異なっていると思います。

これはあなたのコードの簡易版である:

#!/usr/bin/env python3 

def is_it_down(): 
    print_result = "not working" 
    def is_google_down(): 
     nonlocal print_result 
     print_result = "google.com is fine" 
     print(print_result) 
    is_google_down() 
    print(print_result) 

is_it_down() 
:これは、あなたが期待どおりに動作します固定コード、ですが

google.com is fine 
not working 

:出力

#!/usr/bin/env python3 

def is_it_down(): 
    print_result = "not working" 
    def is_google_down(): 
     print_result = "google.com is fine" 
     print(print_result) 
    is_google_down() 
    print(print_result) 

is_it_down() 

出力:

google.com is fine 
google.com is fine 
関連する問題