【发布时间】:2019-12-29 22:30:41
【问题描述】:
这是我的帖子详情视图,效果很好。
class PostDetailView(DetailView):
model = Post
context_object_name = 'post'
template_name = 'posts/detail.html'
def get_queryset(self, *args, **kwargs):
request = self.request
pk = self.kwargs.get('pk')
queryset = Post.objects.filter(pk=pk)
return queryset
def get_context_data(self, **kwargs):
context = super(PostDetailView, self).get_context_data(**kwargs)
content['comments'] = Comment.objects.all()
return context
但是,当我将 get 方法添加到视图时,它不再起作用了。
def get(self, request, *args, **kwargs):
# how to return here so that it works exactly like before
在添加 get 方法 get_queryset 和 get_context_data 后不会自动调用,并且模板中的上下文为空。那么什么是 get 方法才能让它像以前一样工作呢?
编辑 我的目标是做这样的事情
if request.is_ajax():
html = render_to_string('comments/detail.html') # ajax reply with html data
return HttpResponse(html)
return render 'posts/detail.html'
那么我把这段代码放在哪里,并且仍然想继续调用所有方法,例如 get_queryset 和 get_context_data 以自动调用?
【问题讨论】:
-
你还没有解释你想做什么。为什么要覆盖 get 方法?你用那个方法做什么?
-
这很有意义,因为
get(..)已经实现触发get_context_data等并使用该上下文呈现模板,因此通过覆盖它,您可以删除样板逻辑。
标签: django detailview getmethod