我想这应该很简单,但我想我错过了什么。
简单描述:我有一个列出特定单词的页面。每个单词都有一个ID。我将此ID传递给一个函数,然后将其发布到一个URL。我尝试做的是传递ID,在后端查询,然后转移到带有查询结果的编辑页面。
这是我的代码:
AngularJS功能
$scope.editDefinition = function (searchItem) {
var param = { id: searchItem.id };
var url = "/table-based";
$http.post(url, param).success(function (data) {
console.log(data);
});
};
Flask / Python路线功能
@app.route("/table-based", methods=["GET", "POST"])
def edit_definition():
if request.method == "POST":
j = json.loads(request.data)
uid = j["id"]
cdef = db.getDefinitionById(uid)
return render_template("edit.html", definition=cdef)
return render_template("edit.html")
HTML
<div ng-init="init('{{ definition |tojson|safe }}')" ng-controller="editCtrl">
<ng-include src="'/_partial_edit_form'"></ng-include>
</div>
EditCtrl
具有相关的$scope.init
功能,可以接收definition
。基本上,它会返回包含edit.html
模板的HTML的响应,但不会重定向到该网址。
是什么给出了?
答案 0 :(得分:2)
您尚未实施任何会导致浏览器重定向到新模板页面的内容。在返回的数据中,您应该只看到render_template生成的html。
我可以看到两个选项。第一种方法是将cdef存储在flask的g或session对象中,然后使用angular $ route.reload()或$ window.location.reload()重新加载页面,然后让烧瓶从g或者GET上的会话中获取cdef。
第二个选项是重构你的代码,以便你有角度进行页面渲染,然后你只需在POST上更新你的定义对象。在这种情况下,flask将返回json.dumps(cdef)而不是渲染模板,您将使用角度模板来渲染它。
第二种选择要好得多,而且几乎就是Angular的设计目标。当我创建Angular-Flask应用程序时,我很少使用render_template,而是在使用基于烧瓶的API从JSON检索数据后,让Angular完成所有渲染。