【发布时间】:2015-02-16 03:43:53
【问题描述】:
Django 和 Ajax 的新手。
我想知道一个关于良好实践网页设计的一般问题: 是否应该返回一个调用使用 ajax 的调用的视图函数,返回数据结构并将 HTML 页面的呈现留给客户端(意思是 javascript),还是呈现整个 HTML 并将其返回给 javascript 也是一种“好的”做法,所以它可以把它粘贴到代码中的某个地方吗?
我不希望我的模板的逻辑被 javascript 重复。我想使用模板来呈现 HTML 并将其返回给客户端。但是...这忽略了 ajax 的意义,不是吗?
我确实看到了这篇精彩的帖子: Rendering JSON objects using a Django template after an Ajax call
由于它很旧,我没有在那里发表回复,而是在这里恢复了这件事。 技术上可以在服务器端渲染吗?是的。 最佳实践?我不知道。
也许更好的做法是让我的 HTML 页面类型的“空白”已经形成良好的格式,并且只是来回传递数据。
我很想听听您对此事的意见。
在被搁置后,因为这个讨论往往是基于意见的(确实如此)并且这种格式不适合这个论坛,但我认为更新我的帖子以包含更精细的讨论分辨率会很好很多技术含义。
在您的“djangonian”体验中,构建网页(例如新闻提要)的最佳实践是可以通过 ajax 调用动态更新,从而返回客户端原始数据(例如使用 JSON ) 而不是预渲染的 HTML?
我会更具体: 我的网站有一个提要。 在该提要上,用户会看到许多帖子和每个帖子的 cmets。 每个帖子都是它自己的 HTML 表单,并且已经构建为 HTML。页面源示例:
<form id="post_looloo_by_testuser" method="post" action="/bz/login/" class="single_post_form">
<input type='hidden' name='csrfmiddlewaretoken' value='GfOHEMxx433XBUpg3yakTYPRQCVq132f' />
<p class="box_single_post">
<span name="post">
<label class="single_post_form">
says: looloo
</label>
</span>
<span name="comments_for_post">
<span name="single_comment">
<label class="single_comment">
testuser2 commented: moomoomoo
</label>
</span>
</span>
<span name="comments_for_post">
<span name="single_comment">
<label class="single_comment">
testuser2 commented: qweqwe
</label>
</span>
</span>
<span name="add_comment">
<input id="id_add_comment" maxlength="140" name="new_comment" type="text" placeholder="Add a comment..."/>
</span>
</p>
</form>
在顶部,就像在 facebook 上一样,用户可以立即添加新帖子。
<form id="add_post_form" method="post" action="" class="new_post_form" username="testuser">
<input type='hidden' name='csrfmiddlewaretoken' value='GfOHEMxx433XBUpg3yakTYPRQCVq132f' />
<span name="add_post">
<input id="id_add_post" maxlength="140" name="new_post" type="text" placeholder="Say something"/>
<input id="add-post-btn" type="submit" name="submit" value="Add" username="testuser"/>
</span>
</form>
“添加”按钮(实际上是表单的提交)随后会在服务器端调用我的应用程序中的某个视图的 ajax 调用。 我希望视图返回诸如拥有帖子的用户、帖子文本、cmets 列表等信息。 信息将以 JSON 或 XML 形式返回。不像预渲染的 HTML。 我想让我的 javascript 处理信息并使用顶部的新帖子更新用户的提要,同时避免刷新页面(因此使用 ajax)。
问题是用户当然可以添加无限数量的帖子(或有限数量,但大于一个)。为什么这有关系?看下面的问题:
我应该如何创建提要页面,以便我只使用动态检索的信息更新页面上的变量,并仍然允许添加更多帖子?
如果我事先知道只有一个这样的新帖子可用,那么我会创建一个预制的帖子表单,不可见,然后 javascript 会为该表单设置值并将其设置为可见。 但是用户添加的第二个帖子呢?第三个?等等……
我很想从您的经验中学习。 谢谢。
【问题讨论】:
-
您好,请注意。我编辑了我的帖子以更好地适应这个论坛的性质。谢谢。