2017-12-02 5 views
-1

Ich bin neu in Kolben. Ich habe Code, der die Ausgabe zum Browser streamt. Für meinen unteren Code muss ich den Bereichswert vom Browser eingeben und die Anzahl bis zum Bereich anzeigen. Danke im Voraus.So streamen Sie die Ausgabe in den Browser mit Kolben

import flask 
import time 

from jinja2 import Environment 
from jinja2.loaders import FileSystemLoader 

app = flask.Flask(__name__) 

@app.route('/') 
def index(): 
    def inner(): 
     for x in range(100):# eg: 100 should input value from browser 
      time.sleep(1) 
      yield '%s<br/>\n' % x 
    env = Environment(loader=FileSystemLoader('templates')) 
    tmpl = env.get_template('result.html') 
    return flask.Response(tmpl.generate(result=inner())) 

app.run(debug=True) 


result.html 
<html> 
{% block body %} 
<body> 
    {% for line in result %} 
    {{ line }} 
    {% endfor %} 
</body> 
{% endblock %} 
</html> 
+0

Sie wollen es wie Benutzer dynamisch zu tun, den Wert aus dem Browser eingibt und ohne Laden der Seite zeigen Ihnen die Zählung? –

+0

danke Amit, ja das ist die Voraussetzung. Der Benutzer gibt den Wert ein und zeigt die Ausgabe auf derselben Seite oder auf einer anderen Seite an. Was auch immer ist einfach. – Prashanth

+0

Wenn Sie Flask Jinja2 ohne Ajax verwenden möchten, müssen Sie entweder die Seite neu laden oder eine neue Seite öffnen. Wenn Sie Ajax verwenden, ist das Laden von Inhalten dynamisch ohne Neuladen der Seite möglich. –

Antwort

0

Hier ist die Antwort zu tun, was Sie zu tun versuchen.

Ich habe Ihre App-Code geändert:

import flask 
import time 

from flask import request 
from jinja2 import Environment 
from jinja2.loaders import FileSystemLoader 

app = flask.Flask(__name__) 

@app.route('/', methods=['GET', 'POST']) 
def index(): 
    result = None 
    if request.method == 'POST': 
     counter = int(request.form.get('counter', 0)) 
     def inner(): 
      for x in range(counter):# eg: 100 should input value from browser 
       time.sleep(1) 
       yield '%s<br/>\n' % x 
     result = inner 
    env = Environment(loader=FileSystemLoader('templates')) 
    tmpl = env.get_template('result.html') 
    return flask.Response(tmpl.generate(result=result if result is None else result())) 

app.run(debug=True) 

Hier habe ich die Indexansicht geändert beide GET und POST Methoden zu behandeln. Wenn eine einfache GET Anfragen kommt, gibt es die Vorlage mit result=None zurück und wenn Methode ist POST es returns=result() (Ich habe result = inner im POST-Block zugewiesen). Die Logik, um None oder einen Wert zu behandeln, wird in der Vorlage behandelt.

Und Ihre Vorlage muss geändert werden:

<html> 
{% block body %} 
<body> 
{% if result%} 
    {% for line in result %} 
    {{ line }} 
    {% endfor %} 
{% else %} 
    <form method="post"> 
     <input type="text" placeholder="Enter a number" name="counter"> 
     <input type="submit" value="Submit"> 
    </form> 
{% endif %} 
</body> 
{% endblock %} 
</html> 

habe ich hinzugefügt, um die if-else-Bedingung, wie Sie die gleiche Vorlage verwenden und sogar die URL ändert sich nicht.

können Sie folgen Flask Quickstart Tutorial um mehr zu erfahren

Verwandte Themen