使用ajax的Django基于类的视图?

2024-03-28 21:31:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

请注意,我使用django大括号来捕捉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代码:

^{pr2}$

我知道这与render_to_string有关,因为如果我简单地将rendered设置为类似“This is some text”的值就可以了,但我不确定我做错了什么。在


Tags: to用户nameselfformgetstringcontext
1条回答
网友
1楼 · 发布于 2024-03-28 21:31:57

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

1)提供Context实例,最好是RequestContext。一个RequestContext将执行所有上下文处理器,因此模板可以使用request和{}等默认变量:

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参数将上下文作为字典传递:

^{pr2}$

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)

相关问题 更多 >