Python 模板和 Ajax

Posted

技术标签:

【中文标题】Python 模板和 Ajax【英文标题】:Python Templating and Ajax 【发布时间】:2011-05-09 09:42:01 【问题描述】:

我无法为这篇文章想出更好的标题,所以如果有人觉得它不合适,请继续编辑它。

我使用烧瓶作为我的 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 从数据库向他发送所需的数据。整个模板是否必须在服务器端处理,然后通过 ajax 调用传输整个模板。我其实不太喜欢这个主意。如果有人能在这里指出我正确的方向,那就太好了。

现在在通过 ajax 加载的页面中,存在一些脚本。如果通过 ajax 加载,这些脚本会起作用吗?

【问题讨论】:

【参考方案1】:

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

要在服务器中进行模板化,您可以像现有的一样创建一个端点,除了模板只创建页面的一部分。然后通过 Ajax 调用点击 URL,并将返回的 HTML 插入页面中的某个位置。

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

【讨论】:

【参考方案2】:

我会选择服务器端模板,因为除非您找到处理相同模板语言的 JS 库,否则您的代码不会枯竭。

home.html 模板中,我会做类似的事情

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

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

【讨论】:

作为替代方案,请考虑仅客户端模板。服务器将简单地生成 JSON,客户端将呈现它。当然,客户端 JavaScript 框架(如 React、Vue 等)会有所帮助。

以上是关于Python 模板和 Ajax的主要内容,如果未能解决你的问题,请参考以下文章

用于命令行脚本和导入模块的 Python“模板”模块

遍历字符串和列表的 Python/Django 模板

python .jjax与django和模板

Python学习(三十七)—— 模板语言之自定义filter和中间件

python-django-模板标签

带有 Python 2.7.6 和 Virtualenv 12.0.7 (OSX10,10.2) 的 Django 1.7.6 - 模板呈现模板语法错误