2017-12-02 12 views
-1

플라스크를 처음 사용합니다. 브라우저에 출력을 스트리밍하는 코드가 있습니다. 내 아래의 코드에서 브라우저에서 범위 값을 입력하고 범위까지 카운트를 표시해야합니다. 미리 감사드립니다.플라스크를 사용하여 브라우저로 출력을 스트리밍하는 방법

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

브라우저에서와 페이지로드없이 값을 입력 배우고 따를 수 있는가? –

+0

감사합니다. Amit, 예. 요구 사항입니다. 사용자가 값을 입력하고 동일한 페이지 또는 다른 페이지에 출력을 표시합니다. 어느 쪽이든 쉽습니다. – Prashanth

+0

Flask Jinja2를 아약스없이 사용하려면 페이지를 새로 고침하거나 새 페이지를 열어야합니다. 동적으로 페이지를 재로드하지 않고도 Ajax 로딩 컨텐츠를 사용할 수 있습니다. –

답변

0

다음은 수행하려는 작업에 대한 답변입니다.

I가 앱 코드를 수정 한 다음은

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) 

내가 모두 GETPOST 방법을 처리 할 수있는 인덱스보기를 수정했습니다. 간단한 GET 요청이 오면 result=None 템플릿을 반환하고 메서드가 POST이면 returns=result() (POST 블록에 결과 = 내부를 할당했습니다). 없음 또는 값을 처리하는 논리는 템플리트에서 처리됩니다.

그리고 템플릿이 필요

변경할 수는 다음의 제품에 :

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

난 당신이 변경되지 않습니다 같은 템플릿, 심지어 URL을 사용하는 같은 경우-다른 조건을 추가했습니다.

당신은 당신이 수를 보여 Flask Quickstart Tutorial

당신은 동적으로 사용자처럼하고 싶은