【问题标题】:How to call an Ajax view from template?如何从模板调用 Ajax 视图?
【发布时间】:2015-03-17 15:17:39
【问题描述】:

我有一些通过 Ajax 调用加载的视图。但在渲染初始页面时,即进行 Ajax 调用的页面,我可能希望从一开始就立即加载我的 Ajax 视图之一。

即,在我的模板中,我有类似的内容:

{% if something_happen %}
<p>Some text.</p>
{% else %}
{# Render my ajax view here #}
{% endif %}

我可以用一些 Javascript 替换 {# Render my ajax view here #} 来发出实际的 Ajax 请求,或者我可以在 Django 端做一些技巧,立即调用和渲染视图,节省一次网络往返。

出于性能原因,我不喜欢第一个选项,而第二个似乎很乱。

我认为实现这个服务器端技巧的最简洁的方法是从模板内部调用和内联 Ajax 视图。第二种最佳方式是获取从 Ajax 视图返回的 HttpResponse,并以某种方式将其内容嵌入模板中。其他选项包括重复自己,我不能重复自己。

从一开始就嵌入 Ajax 视图的最佳方式是什么?是否有调用内联视图的模板标签?如果没有,我怎么写一个?这是一个好主意吗?如何进行?

【问题讨论】:

  • 请分享初始和ajax视图控制器的代码。
  • 什么意思?对于ajax部分,代码是一样的。
  • Django 具有 URL 映射到的视图(基于函数和类)。如果您可以共享您用于初始视图的视图代码以及 ajax 视图的代码,我将能够制定一个答案。答案可能会有所不同,具体取决于您在这些视图中执行的操作。
  • 我现在没有代码,但我基本上有 2 个 ajax 视图,每个视图都有不同的表单(它们可能接受 POST 或 GET 请求,就像 Django 文档中使用表单的方式一样)。我可能需要从一开始就使用一个,另一个或一个都不使用。现在你让我想到了,在非 ajax 视图中实例化空表单可能就足够了。

标签: ajax django django-templates


【解决方案1】:

如果您的模板实现了通常可以从 Ajax 调用的视图,则可以使用以下内容加载该服务器端:

{% include 'my_template.html' %}

这是假设您通常在 Ajax 视图中填充的任何变量都已经存在于您包含模板的上下文中。如果你需要添加上下文,你可以这样做:

{% with local_var as template_var %}
    {% include 'my_template.html' %}
{% endwith %}

【讨论】:

  • 他们不是,这就是问题所在。对于变量,我要么需要调用视图,要么复制代码,或者重构所有内容以将视图的逻辑放在一个单独的函数中,并且一团糟。
  • 好的...但是如果此时付出的努力太多,那么很难看出服务器端解决方案的哪一部分会更干净。我会把它作为浏览器端的 Ajax 插入,直到/除非值得努力重构。
猜你喜欢
  • 2013-07-10
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 2015-10-30
  • 2013-06-22
  • 2017-04-06
相关资源
最近更新 更多