在Flask中使用AJAX添加上下文变量
Adding a context variable with AJAX in Flask
我有一个需要通过AJAX填充的选择表单。考虑这个简单的例子:
模板/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)
工作得很好,这就是我所做的。但是,我想知道是否存在另一种(更好的?)方法。
例如,我更喜欢使用上下文变量来更好地将视图与控制器分开。像这样:
app.modified.py
@app.route('/get-something/<int:n>')
def get_something(n):
return dict(elements=xrange(n))
模板/index.modified.html
<select id="elements">
{% for elem in elements %}
<option value='{{ elem }}'>{{ elem }}</option>'n
{% endfor %}
</select>
不幸的是,不能工作。它说'dict'对象是不可调用的。请帮忙好吗?这可能吗?注意,我不想重新加载页面,我想要与AJAX示例中相同的行为。
使用索引。修改后,您需要这样做:
return render_template('index.modified.html',
elements=your_dictionary)
没有尝试返回一个字典(这就是为什么你会得到这个错误)。更多示例见http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-ii-templates
您应该返回render_template('index.modified.html', elements=xrange(n))
,因为您想要html。
render_template
返回一个字符串,您可以将其编码为JSON。例:
data = render_template('index.modified.html', elements=xrange(n))
return json.dumps({'data': data})
相关文章:
- Ember添加了对转换调用上下文(路由/控制器)的检查
- 如何在 JavaScript 中动态地向当前执行上下文添加属性
- 如何将项目添加到 Adobe Flash 上下文菜单
- Chrome扩展:正确添加具有非持久背景页的上下文菜单项
- 将图像从一个画布上下文添加到另一画布上下文
- 如何在Raphael元素上添加上下文菜单
- 在非持久性后台脚本上添加上下文菜单项
- 在backbone.js中添加事件会丢失此上下文
- 将多个项目添加到上下文菜单
- 向Mongoose回调添加上下文
- 如何添加固定垂直轴的焦点+上下文缩放时间序列
- 添加"文本颜色"在tinyMCE的上下文菜单中
- 如何向对象添加上下文方法
- 向elFinder添加自定义上下文菜单项
- 谷歌Chrome扩展,添加标签到上下文菜单
- 将搜索引擎上下文菜单项添加到文本区
- Chrome扩展>上下文菜单Api >无法添加onclick处理程序
- 如何在不使用EF的情况下向实体添加上下文元数据?
- 在Flask中使用AJAX添加上下文变量
- 在CKEditor中根据用户选择的列表动态添加上下文菜单项