Django 覆盖详细信息 View 获取方法

标签 django detailview getmethod

这是我的帖子详细信息 View ,效果很好。

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

但是,当我向 View 添加 get 方法时,它不再起作用。
def get(self, request, *args, **kwargs):
    # how to return here so that it works exactly like before

添加get方法后get_querysetget_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_querysetget_context_data被自动调用?

最佳答案

意见的想法像DetailView , ListView等是它为您实现样板逻辑。所以它定义了一个函数def get(self, request, *args, **kwargs)用于呈现逻辑。您通常可以通过指定 model 来调整一些内容。 , queryset等,而无需重新实现整个 View 。

对于 DetailView [Django-doc] ,逻辑在BaseDetailView中实现您可以查看 source code [GitHub] :

class BaseDetailView(SingleObjectMixin, View):
    """A base view for displaying a single object."""
    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        context = self.get_context_data(object=self.object)
        return self.render_to_response(context)

关于Django 覆盖详细信息 View 获取方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57645928/

相关文章:

python - 在 Python/Django 中生成唯一字符串

python - Electron 问题运行manage.py运行服务器

django - 创建与 DetailView 相反的 View

java - 如何获取 XML/JSON 格式的 Httpclient GEtMethod 响应

arrays - 不能用 GET 方法发送数组吗?

django - NOAUTH 需要身份验证。 docker compose for django 上的 Redis 设置

python - 使用基于类的 View 提交表单集数据

django: DetailView: self.object 从方法 post 调用时会引发错误,但从方法 get_context_data 调用时它确实有效

python - 我想向 Django DetailView 添加条件