gpt4 book ai didi

javascript - 使用 ajax 的基于 Django 类的 View ?

转载 作者:行者123 更新时间:2023-11-29 19:41:12 24 4
gpt4 key购买 nike

我试图在用户单击按钮时创建一个对话框,但我一直收到错误消息。这是我的代码。

请注意,我正在使用 django-braces 来捕获 ajax 调用。

查看:

class UserRegistration(braces.AjaxResponseMixin, CreateView):
form_class = UserRegistrationForm
template_name = "registration_form.html"

def get_ajax(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
rendered = render_to_string(self.template_name, context_instance=context)
return HttpResponse(rendered)

Javascript:

$("#signup").on("click", function(){
$("body").append("<div id='dialog' title='Register'></div>");
$( "#dialog" ).dialog({
height: 'auto',
width: 'auto',
modal: true,
autoOpen: false
});

$.ajax({
url: '/signup/',
data: {},
type: 'GET',
success: function(data){
$("#dialog").html(data);
$("#dialog").dialog("open");
},
error: function(error) {
alert("failure");
}
});
});

我知道这与 render_to_string 有关,因为如果我简单地将 rendered 设置为等于“This is some text”之类的内容,它就会起作用,但我不确定我做错了什么。

最佳答案

render_to_string 中的 context_instance 参数需要一个 Context 实例,而 get_context_data 返回一个字典。有几种方法可以解决这个问题:

1) 提供一个Context实例,最好是一个RequestContextRequestContext 将执行所有上下文处理器,因此模板可以使用默认变量,如 requestuser:

from django.template import RequestContext

def get_ajax(self, *args, **kwargs):
context = self.get_context_data(**kwargs)
rendered = render_to_string(self.template_name,
context_instance=RequestContext(self.request, context))
return HttpResponse(rendered)

2) 使用 dictionary 参数将上下文作为字典传递:

def get_ajax(self, *args, **kwargs):
context = self.get_context_data(**kwargs)
rendered = render_to_string(self.template_name, dictionary=context)
return HttpResponse(rendered)

3) 由于您只是将呈现的字符串传递给 HttpResponse 对象,因此您可以跳过 render_to_string,而是使用 render :

from django.shortcuts import render

def get_ajax(self, *args, **kwargs):
context = self.get_context_data(**kwargs)
return render(self.request, self.template_name, context)

关于javascript - 使用 ajax 的基于 Django 类的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22900473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com