python - 如何使用分页这不起作用

标签 python django

views.py paginate_by 不起作用,并且 'if' 语句在 'get_queryset' 中不起作用有什么办法可以解决这个问题

class PostListView(ListView):
    model = Post
    template_name = 'all_users/public/main.html'
    context_object_name = 'posts'
    paginate_by = 3

    def get(self, request, **kwargs):
        if request.user.is_public:
            post = Post.objects.filter(patient=self.request.user).order_by('-date_posted')
            context = {
                'posts': post,
            }
            return render(request, self.template_name, context)

        else:
            query = self.request.session['query']
            post = Post.objects.filter(patient=User.objects.get(username=query)).order_by('-date_posted')
            context = {
                'posts': post,
            }
        return render(request, self.template_name, context)

最佳答案

Django 将对源自 get_queryset 的查询集进行分页。所以你可以通过以下方式实现 View :

from django.contrib.auth.mixins import LoginRequiredMixin

class PostListView(LoginRequiredMixin, ListView):
    template_name = 'all_users/doctor/main.html'
    model = Post
    context_object_name = 'posts'
    paginate_by = 3

    def <b>get_queryset</b>(self, *args, **kwargs):
        super().get_queryset(*args, **kwargs).filter(
            author=self.request.user
        ).order_by('-date_posted')

它将把 Page 对象添加到名为 page_obj 的上下文中。所以你可以用以下方法迭代它:

{% for post in <b>page_obj</b> %}
    {{ post }}
{% endfor %}

编辑:或有条件:

from django.contrib.auth.mixins import LoginRequiredMixin

class PostListView(ListView):
    template_name = 'all_users/doctor/main.html'
    model = Post
    context_object_name = 'posts'
    paginate_by = 3

    def <b>get_queryset</b>(self, *args, **kwargs):
        qs = super().get_queryset(*args, **kwargs)
        if self.request.user.is_public:
            qs = qs.filter(
                author=self.request.user
            )
        else:
            qs = qs.filter(
                patient__username=self.request.session['query']
            )
        return qs.order_by('-date_posted')

Note: You can limit views to a class-based view to authenticated users with the LoginRequiredMixin mixin [Django-doc].

关于python - 如何使用分页这不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61695742/

相关文章:

python - 固定装置的 Django 自然键给出反序列化错误

python - 导入错误 : No module named paramiko

python - pyspark 中处理大数据的优化

python - 检测框架上的焦点移出事件

Python:查找字典的key[value]与其他值的差异并返回差异最小的id

python - Django SECRET_KEY 风险

python - 如何对 tkinter "scrolledtext"模块进行编码

python - Django GET 请求参数来自 POST 请求

python - Django Gunicorn wsgi

django - Webpack - 关闭对/sockjs-node/info 的请求或指定不同的端口