Python模板和Ajax

时间:2010-11-13 02:01:31

标签: python ajax jquery

我无法为这篇文章提供更好的标题,所以如果有人认为不合适,请继续编辑。

我使用flask作为我的python框架,通常我会渲染模板,如下所示: -

@app.route('/home')
def userhome():
    data=go get user details from the database
    return render_template("home.html",userdata=data)

现在我有一个模板名称home.html,我在其中迭代“userdata”的值,如userdata.name,userdata.age等,这些值在模板中占用适当的空格。

然而,我正在开发一个应用程序,其中导航是通过ajax并且如果javascript不可用则不会退回(基本上该应用程序不适用于没有javascript的ppl)。 导航菜单左边有几个标签,(主页,你的,你的弹头)。右列应根据用户点击的内容动态更改。

我无法理解我如何处理模板。根据用户点击的内容,我可以通过json通过xhrGET或xhrPOST从db向他发送所需的数据。整个模板必须在服务器端处理,然后通过ajax调用传输整个模板。我实际上不喜欢这个想法。如果有人能指出我在这里正确的方向,那将会很棒。

现在在通过ajax加载的页面中,有一些脚本存在。如果通过ajax加载,这些脚本是否有效。

2 个答案:

答案 0 :(得分:3)

您有两种选择:服务器上的模板或浏览器中的模板。

要在服务器中使用模板,您可以创建一个与现有模式非常相似的端点,但模板只会创建页面的一部分。然后使用Ajax调用点击URL,并将返回的HTML插入到页面中。

要在浏览器中使用模板,您的端点会创建JSON响应。然后,Javascript模板库可以获取该JSON,从中创建HTML,并将其插入到页面中。例如,有lots of jQuery templating solutions

答案 1 :(得分:2)

我会选择服务器端模板,因为除非你找到一个处理相同模板语言的JS库,否则你的代码就不会是DRY。

home.html模板中,我会执行类似

的操作
<%extends base.html%>
<%include _user_details.html%>
... <% footer and other stuff%>

并将实际标记保留在_user_details.html中。这样,对于AJAX请求,您只需呈现_user_details.html仅部分。