Django - 渲染模板并通过 AJAX 传递它们

Posted

技术标签:

【中文标题】Django - 渲染模板并通过 AJAX 传递它们【英文标题】:Django - rendering templates and passing them via AJAX 【发布时间】:2021-04-11 09:32:16 【问题描述】:

好的,所以这更像是一个概念性问题。

基本上我刚刚发现我可以做到以下几点: 使用 ajax 启动一个函数,该函数返回呈现的 html 模板,将其作为响应发送到 ajax,然后将该 HTML 代码应用到主机 div。这感觉比使用包含标签更加通用和强大。 我可以用最少的 JS 在 Flash 中渲染和重新渲染表单(或 HTML 的任何小 sn-p),最重要的是无需刷新页面。

我知道通过 AJAX 传递整个 html 块可能不是最佳的,所以我避免滥用它。

但是这对我来说感觉很“hacky”,所以我的问题是,为什么我不应该这样做?

如果你想要一些示例代码:

% load crispy_forms_tags %
% load static %
<div id="formdiv1">

</div>
<script>
    function getform_rec() 
    $.ajax(
               type: "GET",
               url: "/backoffice/ajax/rec_form/",
               success: function(data)
               
                   $("#formdiv1").html(data);
               
             );


getform_rec()
</script>

我的看法

def  ajax_rec_form(request):
    if request.method == "GET":
        rec_id = request.GET.get("id", None)
        if not rec_id:
            form = Rec_form()
        else:
            form = Rec_form(instance=Rec.objects.get(id=rec_id))
    return render(request, "rec-form.html", "rec_id": rec_id, "form": form)

rec-form.html 只是一个没有扩展或包含的 html 文件,它只是呈现表单。 是的,视图仍然不完整,它无法处理提交等。因为我想确保在继续沿着这条道路之前我没有做一些非常糟糕的事情。 哦,getform_rec() 实际上是通过按钮调用的,为了简单起见,我只是在加载时调用它。

【问题讨论】:

【参考方案1】:

你需要这样的代码:

data = loader.render_to_string(
    'rec-form.html', "rec_id": rec_id, "form": form
)
return JsonResponse(data)

【讨论】:

我需要吗?为什么? (真的很好奇为什么这比我得到的更好)。我的代码正在运行...我只是想知道使用此方法是否有问题

以上是关于Django - 渲染模板并通过 AJAX 传递它们的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从 django 模板化 html 传递到 ajax

如何在 Django 模板上传递 Python 列表并在 JavaScript 中使用它?

用 django 模板语言实现 javascript

使用 Ajax、Django 将上下文传递到模板中

Django:在部署时通过模板引擎渲染静态文件

使用AJAX获取Django后端数据