我有一个需要通过 AJAX 填充的选择表单。考虑这个简单的例子:
templates/index.html
<!DOCTYPE html>
<html>
<body>
<select id="elements">
</select>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script>
$.ajax({
url: '/get-something/5',
type: "GET",
dataType: "html",
success: function (msg) {
$('#elements').html(msg)
}
})
</script>
</body>
</html>
app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/get-something/<int:n>')
def get_something(n):
result = ''
for i in xrange(n):
result += "<option value='%s'>%s</option>\n" % (i, i)
return result
if __name__ == '__main__':
app.run(debug=True)
这工作得很好,这就是我所做的。但是,我想知道是否存在另一种(更好的?)方法。
例如,我更喜欢有一个上下文变量来更好地将 View 与 Controller 分开。像这样的事情:
app.modified.py
@app.route('/get-something/<int:n>')
def get_something(n):
return dict(elements=xrange(n))
templates/index.modified.html
<select id="elements">
{% for elem in elements %}
<option value='{{ elem }}'>{{ elem }}</option>\n
{% endfor %}
</select>
不幸的是,这不起作用。它说,“dict”对象不可调用。
请问有什么帮助吗?这可能吗?请注意,我不想重新加载页面,我想要与 AJAX 示例中相同的行为。
最佳答案
使用index.modified,你需要做这样的事情:
return render_template('index.modified.html',
elements=your_dictionary)
不尝试返回字典(这就是您收到该错误的原因)。请参阅http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ii-templates更多示例
关于javascript - 在 Flask 中使用 AJAX 添加上下文变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30631759/