我正在使用带有Jinja 2的Flask,并在用户单击“显示表”按钮时尝试向用户显示一个表,但不重新加载整个页面。 为此,我实现了一个工作正常的ajax调用。 问题是当我尝试将这些变量与Jinja一起使用时:
<urth-viz-table id="table" datarows="{{rows}}"
columns="{{header}}"
rows-visible="15"
selection-as-object>
</urth-viz-table>
Python给了我错误:
127.0.0.1 - - [26/Oct/2017 13:07:11] "POST /showTableQuestion HTTP/1.1" 500 -
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1997, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1615, in full_dispatch_request
return self.finalize_request(rv)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1630, in finalize_request
response = self.make_response(rv)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1737, in make_response
status=status_or_headers)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/wrappers.py", line 801, in __init__
self.headers = Headers(headers)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/datastructures.py", line 946, in __init__
self.extend(defaults)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/datastructures.py", line 1079, in extend
for key, value in iterable:
ValueError: need more than 1 value to unpack
您是否知道解决此问题的不同方法?
HTML文件show_quizz.html如下所示:
{% if question_obj.question == asked_question %}
Die Antwort des Users ist: {{ user_answer }} <br/>
Die richtige Antwort ist: {{ question_obj.answer }} <br/>
<form method="POST" action="{{ url_for('showTable') }}" id="csv_table">
<h3>Watch the underlying data to the question!</h3>
<input type="hidden" id="displayTable" name="question_obj_id_Table"
value="{{ question_obj.id }}"/>
<button type="button">display Table</button>
</form>
<h1 id="didi"></h1>
{% if show_Table == "True" %}
<h2>HELLO</h2>
<!-- <script>console.log('fooo')</script> -->
<urth-viz-table id="table" datarows="{{rows}}"
columns="{{header}}"
rows-visible="15"
selection-as-object>
</urth-viz-table>
{% endif %}
{% endif %}
使用的Python方法:
@app.route('/answer Table', methods=['POST'])
def showTable():
return render_template('show_quizz.html')
@app.route('/showTableQuestion', methods=['POST'])
def showTableQuestion():
table_url = Question.query.get_or_404(request.form['question_obj_id_Table']).table
header, rows = generate_table(table_url)
show_Table = "True"
return (header , rows , show_Table)
用于ajax调用的Javascript:
$(function(){
$('button').click(function(){
//var question_obj_id = $('#displayTable').val();
$.ajax({
url: '/showTableQuestion',
data: $('form').serialize(),
type: 'POST',
success: function(response){
console.log(response)
},
error: function(error){
console.log(error);
}
});
});
});
答案 0 :(得分:0)
通过ajax调用你的控制器的事实在这里是完全无关紧要的,你有同样的问题直接得到相同的url。
至于为什么会出现此错误,您的showTableQuestion()
视图会返回一个(header , rows , show_Table)
元组,according to the FineManual被解释为真正(response, status, headers)
,因此Flask会尝试从show_Table
构建HTTP响应头,这是一个字符串,其中预期有key,value
对序列。
FWIW,我自己从来没有使用过Flask,发现这个让我花了不到10分钟。发布您的问题肯定至少需要10分钟。也许您可以利用这段时间自己搜索FineManual?
(我不是故意粗鲁,但看起来越来越多的人认为SO是一个免费的调试服务,所以即使是最基本的努力,如阅读错误信息和追溯并检查文档。
现在我不知道您从(header , rows , show_Table)
返回此showTableQuestion()
元组的期望是什么,但是如果您希望它在您的浏览器中神奇地重新渲染模板代码,那么我强烈建议您花点时间了解HTTP协议以及前端和后端代码之间的区别。