如何从模板调用Ajax视图?

如何从模板调用Ajax视图?,ajax,django,django-templates,Ajax,Django,Django Templates,我有一些视图是通过Ajax调用加载的。但是,在呈现初始页面(进行Ajax调用的页面)时,我可能希望从一开始就立即加载一个Ajax视图 即,在我的模板中,我有如下内容: {% if something_happen %} <p>Some text.</p> {% else %} {# Render my ajax view here #} {% endif %} {%如果发生了什么事%} 一些文本 {%else%} {在这里呈现我的ajax视图} {%endif%} 我

我有一些视图是通过Ajax调用加载的。但是,在呈现初始页面(进行Ajax调用的页面)时,我可能希望从一开始就立即加载一个Ajax视图

即,在我的模板中,我有如下内容:

{% if something_happen %}
<p>Some text.</p>
{% else %}
{# Render my ajax view here #}
{% endif %}
{%如果发生了什么事%}
一些文本

{%else%} {在这里呈现我的ajax视图} {%endif%}
我可以用一些Javascript来替换
{#Render my ajax view here#}
,这些Javascript将发出实际的ajax请求,或者我可以在Django端执行一些技巧,立即调用并呈现视图,节省一次网络往返

出于性能方面的原因,我不喜欢第一个选项,而第二个选项看起来很混乱

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


从一开始嵌入Ajax视图的最佳方式是什么?是否有一个模板标记将内联线调用为视图?如果没有,我怎么写呢?这是个好主意吗?如何继续?

如果您有一个模板,它实现了一个通常可以从Ajax调用的视图,那么您可以在服务器端加载以下内容:

{% include 'my_template.html' %}
这是假设在Ajax视图中通常填充的任何变量都已经存在于包含模板的上下文中。如果需要添加上下文,可以执行以下操作:

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

请分享初始和ajax视图控制器的代码。你是什么意思?对于ajax部分,代码是相同的。Django有URL映射到的视图(函数视图和基于类的视图)。如果您可以共享用于初始视图的视图代码以及用于ajax视图的代码,那么我将能够构思出一个答案。答案可能会有所不同,这取决于您在这些视图中执行的操作。我现在没有代码,但我基本上有两个ajax视图,每个视图中都有不同的表单(它们可能接受POST或GET请求,就像Django文档中使用表单的方式)。我可能需要使用一个,另一个或从一开始都不使用。现在,您让我想到了这一点,在非ajax视图中实例化空表单就足够了。对于变量,我或者需要调用视图,或者复制代码,或者重构所有内容,使视图的逻辑在一个单独的函数中,并且混乱不堪。。。但如果在这一点上付出了太多的努力,就很难看出服务器端解决方案的哪一部分会更干净。除非值得重构,否则我会将其作为浏览器端Ajax插件。