我试图在我的DetailView中render_to_string
部分,以便通过json将渲染的html发回给ajax来拾取。
我的views.py看起来像这样:
class ProfileDetails(DetailView):
model = UserProfile
def get_object(self, queryset=None):
response_data = {}
response_data['content'] = render_to_string("profile/userprofile_detail/content.html", self.get_context_data())
if request.is_ajax():
return HttpResponse(
json.dumps(response_data),
content_type="application/json"
)
else:
return get_object_or_404(
UserProfile,
user__username=self.kwargs['username'],
)
这不起作用,因为我刚收到此属性错误:
' ProfileDetails'对象没有属性' object'
我在线搜索了如何执行此操作,但对于我需要使用自定义网址参数的情况,这还不够。
如何才能使我的工作目前如何设置?我唯一的目标是将渲染的部分发送给ajax,但我需要先实现渲染它。
答案 0 :(得分:1)
我认为你没有正确地覆盖get_object()方法。您的实现可以返回一个HttpResponse对象,DetailView似乎无法正确显示该对象。即使它可以序列化HttpResponse对象,你的代码也会尝试显示你正在构建的HttpResponse对象的字段/值,当你真正想要的是view返回HttpResponse对象本身。你想要做的是删除get_object方法中的所有ajax检测,序列化和响应生成逻辑,并将其移动到视图的get()方法的覆盖中,以实现以下效果:
def get(self, request, *arg, **kwargs):
if request.is_ajax():
# Generate and return your HttpResponse object here
return super(ProfileDetails, self).get(request, *args, **kwargs)
get方法的返回值应该是一个HttpResponse对象,基本View类知道如何处理。我建议您查看基于类的视图的文档,以便更好地了解它们如何处理请求/响应。