我有一个Python烧瓶应用程序,它接受输入id并动态生成数据到html文件中。下面是我的app.py文件。
@app.route('/execute', methods=['GET', 'POST'])
def execute():
if request.method == 'POST':
id = request.form['item_ids']
list = [id]
script_output = subprocess.Popen(["python", "Search_Script.py"] + list)
# script_output = subprocess.call("python Search_Script.py "+id, shell=True)
# render_template('running.html')
script_output.communicate()
#driver = webdriver.Chrome()
#driver.get("home.html")
#driver.execute_script("document.getElementById('Executed').style.display = '';")
return render_template('execute.html')
@app.route('/output')
def output():
return render_template('output.html')
output.html文件底部有以下代码。
<div class="container" style="text-align: center;">
{% include 'itemSearchDetails.html' %}
</div>
每次动态生成itemSearchDetails.html都会根据输入生成。我检查不同的输入,它是完美的生成。当我第一次使用某些输入(假定为2)值运行它时,它会完美运行并正确显示输出。但是,当我下次运行不同的值(假设为4)时,将为这4个值生成文件'itemSearchDetails.html',但浏览器仅显示前2个值的输出。无论我运行多少次,浏览器都只显示带有第一个运行值的输出。
因此,无论我跑多少次,每次只显示第一个输入值。我不确定它是否是浏览器缓存问题,因为我尝试在chrome中“禁用缓存”。它仍然没有用。如果我遗失了某些东西,请告诉我。
答案 0 :(得分:0)
尝试this answer的解决方案:
参数TEMPLATES_AUTO_RELOAD
是否检查模板源的修改并重新加载 它自动。默认情况下,该值为None,表示Flask 仅在调试模式下检查原始文件。
可以找到原始文档here。
答案 1 :(得分:0)
看起来Jinja正在缓存include
d模板。
如果您不需要将HTML解释为Jinja模板,而只是按原样包含其内容,请首先阅读该文件并将内容传递到模板中:
with open('itemSearchDetails.html', 'r') as infp:
data = infp.read()
return render_template('execute.html', data=data)
...
{{ data|safe }}
(如果您确实需要将HTML页面解释为Jinja(如include
所示),则可以从Template
解析一个Jinja data
,然后使用include
用该动态编译的模板标记。)