首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最初呈现页面并使用相同的模板HTML通过AJAX进行更新

最初呈现页面并使用相同的模板HTML通过AJAX进行更新
EN

Stack Overflow用户
提问于 2009-11-11 23:18:28
回答 3查看 2.8K关注 0票数 10

假设您有一个名为“查看故事”的视图,它只是一个通过Python/Django在后端呈现的网页。在该页面上,底部有一个注释列表,作为“查看故事”模板的一部分,使用Django的模板系统(在循环中)。此页面还允许您向列表中添加注释。这是通过AJAX完成的,页面用新的注释更新(不发送新的完整页面请求)。

现在,当将新注释添加到列表末尾时,我希望为这个新注释生成的HTML (在<li>中的一些内容)使用完全相同的代码,用于生成通过原始请求发送给客户机的原始注释。

有多种方法可以做到这一点:

  1. 让初始呈现将注释数据抛入javascript变量,并在呈现页面后通过javascript添加内容。然后,当添加新注释时,可以使用相同的javascript来呈现新的注释。问题是:从搜索引擎的角度来看,如果在页面呈现后生成注释,我不确定google是否能够索引它们--我猜,每次通过AJAX添加新的注释时,
  2. 都不会这样做,让ajax请求返回要放到页面上的实际HTML,而不仅仅是新注释的JSON数据。可以使用用于呈现原始页面的相同模板片段生成HTML。这方面的问题在于,它将AJAX请求与特定视图或我不喜欢的呈现方式联系在一起。
  3. 类似于#2,只是单独请求检索新注释的HTML,或者可能删除和重新呈现所有注释和列表。不喜欢这样,因为它效率很低,而且不必要的time-consuming.

因此,总之,我想要一种避免复制单个视图的模板/HTML代码的方法。我想要一些关于什么对其他人有效的建议,因为我很确定这是一个普通的案例,不管后端的技术如何。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-11 23:24:52

我认为备选方案2是最好的。它是增量的(只在添加注释时再呈现一个注释),并重新使用呈现。如果您不喜欢只从Ajax请求返回HTML,那么让响应是一个JSON结构,其中只包含HTML作为一个组件。然后,您也可以携带状态(或其他任何东西),而不需要额外的请求来获取HTML。

选项1是浪费的:服务器应该呈现页面,因为它应该首先出现。

选项3也是浪费的:为什么要提出两个请求来添加一个评论呢?

票数 3
EN

Stack Overflow用户

发布于 2009-11-12 06:54:28

以下是你应该做的事情:

view_story.html:

代码语言:javascript
运行
复制
bla bla bla

Comments:
<ul id="comments">
{% for comment in comments %}
   <li>{% include "comment_item.html" %}</li>
{% endfor %}
</ul>
<from>Ajax form here</form>

而不需要为添加注释(Ajax)创建视图:

代码语言:javascript
运行
复制
def add_comment(request):
    comment = Comment(...)
    return render_to_response('comment_item.html', {'comment': comment})

因此,在将ajax查询提交到add_comment视图后,您将得到评论的内容(一条评论)..然后把它推到清单上..。f.e.像这样使用jQuery:

代码语言:javascript
运行
复制
$('ul#comments').append('<li>'+comment_content+'</li>')
票数 6
EN

Stack Overflow用户

发布于 2010-06-18 05:24:52

还有备选方案4:

复制列表中的现有元素并更改其值。当然,这比模板更不灵活。您可以复制一个隐藏元素,以处理列表为空的情况。

您还可以尝试选项2b:

像选项2一样在服务器上生成HTML,但不是直接访问数据库,而是传递生成例程JSON (或一个很容易转换为JSON的对象)。这涉及到更多的工作,但意味着您在编写自己的网站的同时有效地编写了一个API。

选项1是任何非web应用程序都会使用的。尽管搜索引擎正在改进其处理AJAX的能力,但仍然强烈建议返回HTML中的所有内容。我认为Javascript在所有现代浏览器中都足够快,除了大页面1之外,除了SEO问题之外,其他都是相当合理的。

还有选项5--在服务器上使用Javascript生成页面,并在客户机上使用相同的代码。这可能是最复杂的方法,我不会推荐它,除非你真的有一个很好的理由。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1718784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档