【发布时间】:2021-03-20 01:13:21
【问题描述】:
我在过滤查询集时遇到问题,过滤后应该分页,我正在使用 get_queryset 过滤对象的查询集,但在页面上没有显示任何内容。我有一个博客页面,我将所有帖子都放在一个列表中,并进行了分页,在页面上我有最常见的标签,每当我点击一个标签时,它都会重定向页面上的用户,其中包含具有该标签的帖子,我希望它们显示在列表中并像在初始页面中一样进行分页,但它不起作用。
我的看法:
class TaggedPostListView(ListView):
model = Post
template_name = 'blog/blog.html'
context_object_name = 'posts'
paginate_by = 2
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
tags = Post.tags.most_common()[:8]
context['banner_page_title'] = 'Blog'
context['page_location'] = 'home / blog'
context['tags'] = tags
return render(request, self.template_name, context)
def get_context_data(self, **kwargs):
context = {}
return context
def get_queryset(self):
tag = get_object_or_404(Tag, slug=self.kwargs.get('slug'))
return Post.objects.filter(tags=tag).order_by('-published_date')
型号:
class Post(models.Model):
class PostCategory(models.TextChoices):
FAMILY = 'FAMILY', _('Family')
BUSINESS = 'BUSINESS', _('Business')
MWRKETING = 'MARKETING', _('Marketing')
SPENDINGS = 'SPENDINGS', _('Spendings')
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(_('Title'), max_length=200, unique=True)
content = models.TextField(_('Content'))
category = models.CharField(_('Category'), max_length=9, choices=PostCategory.choices, default=PostCategory.BUSINESS)
slug = models.SlugField(_('Slug'), max_length=200, blank=True, null=False, unique=True)
tags = TaggableManager(_('Tags'))
published_date = models.DateTimeField(_('Published Date/Time'), auto_now_add=True)
updated_date = models.DateTimeField(_('Updated Date/Time'), auto_now=True)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super().save(*args, **kwargs)
@property
def comments_count(self):
return self.comments.count()
网址:
path('tag/<slug:slug>/', TaggedPostListView.as_view(), name='tag'),
{% extends 'home/base.html' %}
{% load static %}
{% block content %}
<!--================Blog Area =================-->
<section class="blog_area section-margin">
<div class="container">
<div class="row">
<div class="col-lg-8 mb-5 mb-lg-0">
<div class="blog_left_sidebar">
{% for post in posts %}
<article class="blog_item">
<div class="blog_item_img">
<img class="card-img rounded-0" src="{% static 'img/blog/m-blog-1.jpg' %}" alt="Post Image">
<a href="{% url 'post' post.slug %}" class="blog_item_date">
<h3>{{ post.published_date|date:"d" }}</h3>
<p>{{ post.published_date|date:"M" }}</p>
</a>
</div>
<div class="blog_details">
<a class="d-inline-block" href="{% url 'post' post.slug %}">
<h2>{{ post.title }}</h2>
</a>
<p>{{ post.content|truncatechars:200 }}</p>
<ul class="blog-info-link">
<li><i class="ti-user"></i></li>
{% if post.comments_count %}
<li><i class="ti-comments"></i>{{ post.comments_count }} - Comments</li>
{% else %}
<li><i class="ti-comments"></i>0 Comments</li>
{% endif %}
</ul>
</div>
</article>
{% endfor %}
{% if is_paginated %}
<nav class="blog-pagination justify-content-center d-flex">
<ul class="pagination">
{% if page_obj.has_previous %}
<li class="page-item">
<a href="?page={{ page_obj.previous_page_number }}" class="page-link" aria-label="Previous">
<span aria-hidden="true">
<span class="ti-arrow-left"></span>
</span>
</a>
</li>
{% endif %}
{% for num in page_obj.paginator.page_range %}
{% if page_obj.number == num %}
<li class="page-item active">
<a href="?page={{ num }}" class="page-link">{{ num }}</a>
</li>
{% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %}
<li class="page-item">
<a href="?page={{ num }}" class="page-link">{{ num }}</a>
</li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li class="page-item">
<a href="?page={{ page_obj.next_page_number }}" class="page-link" aria-label="Next">
<span aria-hidden="true">
<span class="ti-arrow-right"></span>
</span>
</a>
</li>
{% endif %}
</ul>
</nav>
{% endif %}
</div>
</div>
<div class="col-lg-4">
<div class="blog_right_sidebar">
<aside class="single_sidebar_widget search_widget">
<form action="#">
<div class="form-group">
<div class="input-group mb-3">
<input type="text" class="form-control" placeholder="Search Keyword">
<div class="input-group-append">
<button class="btn" type="button"><i class="ti-search"></i></button>
</div>
</div>
</div>
<button class="button rounded-0 w-100" type="submit">Search</button>
</form>
</aside>
<aside class="single_sidebar_widget post_category_widget">
<h4 class="widget_title">Category</h4>
<ul class="list cat-list">
<li>
<a href="#" class="d-flex">
<p>Resaurant food</p>
<p>(37)</p>
</a>
</li>
<li>
<a href="#" class="d-flex">
<p>Travel news</p>
<p>(10)</p>
</a>
</li>
<li>
<a href="#" class="d-flex">
<p>Modern technology</p>
<p>(03)</p>
</a>
</li>
<li>
<a href="#" class="d-flex">
<p>Product</p>
<p>(11)</p>
</a>
</li>
<li>
<a href="#" class="d-flex">
<p>Inspiration</p>
<p>21</p>
</a>
</li>
<li>
<a href="#" class="d-flex">
<p>Health Care (21)</p>
<p>09</p>
</a>
</li>
</ul>
</aside>
<aside class="single_sidebar_widget popular_post_widget">
<h3 class="widget_title">Recent Post</h3>
{% for post in recent_posts %}
<div class="media post_item">
<img src="img/blog/popular-post/post1.jpg" alt="post">
<div class="media-body">
<a href="single-blog.html">
<h3>{{ post.title }}</h3>
</a>
<p>{{ post.date_posted|date:"F m, Y" }}</p>
</div>
</div>
{% endfor %}
</aside>
<aside class="single_sidebar_widget tag_cloud_widget">
<h4 class="widget_title">Post Tags</h4>
<ul class="list">
{% for tag in tags %}
<li>
<a href="{% url 'tag' tag.slug %}">{{ tag }}</a>
</li>
{% endfor %}
</ul>
</aside>
<aside class="single_sidebar_widget instagram_feeds">
<h4 class="widget_title">Instagram Feeds</h4>
<ul class="instagram_row flex-wrap">
<li>
<a href="#">
<img class="img-fluid" src="img/instagram/widget-i1.png" alt="">
</a>
</li>
<li>
<a href="#">
<img class="img-fluid" src="img/instagram/widget-i2.png" alt="">
</a>
</li>
<li>
<a href="#">
<img class="img-fluid" src="img/instagram/widget-i3.png" alt="">
</a>
</li>
<li>
<a href="#">
<img class="img-fluid" src="img/instagram/widget-i4.png" alt="">
</a>
</li>
<li>
<a href="#">
<img class="img-fluid" src="img/instagram/widget-i5.png" alt="">
</a>
</li>
<li>
<a href="#">
<img class="img-fluid" src="img/instagram/widget-i6.png" alt="">
</a>
</li>
</ul>
</aside>
<aside class="single_sidebar_widget newsletter_widget">
<h4 class="widget_title">Newsletter</h4>
<form action="" method="POST">
{% csrf_token %}
<div class="form-group">
<input type="email" class="form-control" name="newsletter_email" placeholder="Enter email" required>
</div>
<button class="button rounded-0 w-100" type="submit">Subscribe</button>
</form>
</aside>
</div>
</div>
</div>
</div>
</section>
<!--================Blog Area =================-->
{% endblock %}
【问题讨论】:
-
你如何渲染列表?
-
我现在添加模板:D
-
我已经添加了渲染
标签: python django pagination