javascript - 在 Flask 中使用 AJAX 添加上下文变量

标签 javascript jquery python ajax flask

我有一个需要通过 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/

相关文章:

用于 self 解析对象的 Javascript 帮助器,可与 Angulars $resource 等 Promise 一起使用

javascript - 进行奇特的文件输入时未捕获类型错误

javascript - 如何通过表中的 id 获取图片并将其从一个 td 移动到另一个 td?

javascript - 如何计算输入的字符数及其操作?

python - 如何获取 Google Apps 市场通知

python - 使用装置或脚本预填充数据库?

c# - keyup 事件调用数据库函数并填充列表框

Javascript 路由正则表达式

javascript - 如何延迟增加var?

python - 如何使用正则表达式python提取多行文本