好的,所以这更像是一个概念性问题。
基本上我刚刚发现我可以执行以下操作: 使用 ajax 启动一个函数,该函数返回呈现的 HTML 模板,将其作为对 ajax 的响应发送,然后将该 HTML 代码应用到主机 div。这感觉比使用包含标签更加通用和强大。 我可以用最少的 JS 在 Flash 中渲染和重新渲染表单(或任何小的 HTML 片段),最重要的是,无需刷新页面。
我知道通过 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() 实际上是由按钮调用的,为了简单起见,我只是在加载时调用它。
答案 0 :(得分:1)
您需要这样的代码:
data = loader.render_to_string(
'rec-form.html', {"rec_id": rec_id, "form": form}
)
return JsonResponse(data)