0

在这段代码中;

def post(self):
    chtml = displayhtml(public_key, error = None)
    template_values = {'captchahtml': chtml}
    path = os.path.join(os.path.dirname(__file__), 'main.html')
    self.response.out.write(template.render(path, template_values))

当发出 http post 请求时,我可以使用给定的模板元素刷新整个页面。

我的问题是是否可以只刷新 div 或 iframe 而不是整个页面?

4

1 回答 1

1

是的,可以在请求期间刷新页面的一部分。

但它需要浏览器端的一些应用程序或 UI 逻辑来促进这一点。

一种方法是使用专用的 iframe。将 iframe 视为只是浏览器窗口中的浏览器窗口。您可以将您喜欢的任何内容插入 iframe,并且可以独立于页面中围绕它的内容刷新 iframe。iframe 方法通常用于周围页面的内容和 iframe 本身的内容来自不同地方的情况。例如,facebook“like widget”使用来自 facebook 的内容。很长一段时间以来,Facebook 都为人们提供了一种嵌入页面的方法,即一个包含类似小部件的 iframe。通过这种方式,facebook 能够保持对其图像、品牌、外观和感觉等的控制,而不管小部件嵌入到哪种类型的页面中。

当框架的内容和周围位的内容来自同一个源时——比如你的 appengine 实例,那么你就不需要 iframe。您可以使用一个简单的 div,并异步更新它。

这种方法有时被称为 AJAX - 指的是异步 Javascript 和 XML。基本思想意味着从浏览器向服务器发出异步请求(超出正常的页面刷新周期)以获取内容;然后,在 javascript 中实现的浏览器逻辑可以以它选择的任何方式更新 UI。

与名称相反,发送 XML 作为此类异步请求的响应并不是必须的。事实上,更常见的方法是使用 JSON 作为数据格式。但可以肯定的是,当使用这种设计模式时,服务器上的 Python 代码通常不会返回格式化的 html。它将以某种合理的格式(XML、JSON 等)返回数据,然后在浏览器中运行的 Javascript 逻辑将在适当的位置将该数据呈现为 HTML。

在“标准”网络浏览器模型中,每个页面请求都会发送一个 HTTP 请求(尽管可能会针对 .css 文件、图像等发送额外的请求),并且每个额外的请求都意味着一次完整的页面刷新。在 AJAX 模型中,浏览器最初像以前一样请求网页,但可以异步发送额外的 HTTP 请求,而无需完全刷新页面。

于 2012-04-05T21:04:18.170 回答