Wagtail - 仅在主页上显示三个最新帖子

2023-12-20

我创建了一个模型来在主页上显示帖子,但只想显示三个最新帖子。我是否需要为此使用分页,或者是否有可以使用的挂钩?

我想我可以使用分页,只是不包含“下一个”按钮,但这看起来有点像黑客,我想以正确的方式做到这一点。

我对 Django 和 Python 还很陌生,并将继续尝试,但如果有人能给我指出正确的方向,我将非常感激。

这是主页模型:

from __future__ import unicode_literals

from django.db import models

from wagtail.wagtailcore.models import Page
from wagtail.wagtailcore.fields import RichTextField
from wagtail.wagtailadmin.edit_handlers import FieldPanel

from blog.models import BlogPage


class HomePage(Page):
    def blogs(self):
        blogs = BlogPage.objects.all()
        blogs = blogs.order_by('-date')
        return blogs

这是 BlogPage 模型:

class BlogPage(Page):
body = RichTextField(verbose_name=_('body'), blank=True)
tags = ClusterTaggableManager(through=BlogPageTag, blank=True)
date = models.DateField(
    _("Post date"), default=datetime.datetime.today,
    help_text=_("This date may be displayed on the blog post. It is not "
                "used to schedule posts to go live at a later date.")
)
header_image = models.ForeignKey(
    'wagtailimages.Image',
    null=True,
    blank=True,
    on_delete=models.SET_NULL,
    related_name='+',
    verbose_name=_('Header image')
)
author = models.ForeignKey(
    settings.AUTH_USER_MODEL,
    blank=True, null=True,
    limit_choices_to=limit_author_choices,
    verbose_name=_('Author'),
    on_delete=models.SET_NULL,
    related_name='author_pages',
)

search_fields = Page.search_fields + [
    index.SearchField('body'),
]
blog_categories = models.ManyToManyField(
    BlogCategory, through=BlogCategoryBlogPage, blank=True)

settings_panels = [
    MultiFieldPanel([
        FieldRowPanel([
            FieldPanel('go_live_at'),
            FieldPanel('expire_at'),
        ], classname="label-above"),
    ], 'Scheduled publishing', classname="publishing"),
    FieldPanel('date'),
    FieldPanel('author'),
]

def save_revision(self, *args, **kwargs):
    if not self.author:
        self.author = self.owner
    return super(BlogPage, self).save_revision(*args, **kwargs)

def get_absolute_url(self):
    return self.url

def get_blog_index(self):
    # Find closest ancestor which is a blog index
    return self.get_ancestors().type(BlogIndexPage).last()

def get_context(self, request, *args, **kwargs):
    context = super(BlogPage, self).get_context(request, *args, **kwargs)
    context['blogs'] = self.get_blog_index().blogindexpage.blogs
    context = get_blog_context(context)
    context['COMMENTS_APP'] = COMMENTS_APP
    return context

class Meta:
    verbose_name = _('Blog page')
    verbose_name_plural = _('Blog pages')

parent_page_types = ['blog.BlogIndexPage']


BlogPage.content_panels = [
    FieldPanel('title', classname="full title"),
    MultiFieldPanel([
        FieldPanel('tags'),
        InlinePanel('categories', label=_("Categories")),
    ], heading="Tags and Categories"),
    ImageChooserPanel('header_image'),
    FieldPanel('body', classname="full"),
]

...这是 HTML:

     <div class="row">
      <div class="col-md-10 col-md-offset-1 blocks home-page-posts">
        {% for blog in page.blogs %}
      <div class="col-md-4">
        <a class="blog-post-link" href="{% pageurl blog %}">
          <h3>{{ blog.title }}</h3>
        </a>
      <div class="blog-intro">
          {{ blog.body|richtext|truncatewords_html:50 }}
            <a class="read-more" href="{% pageurl blog %}">Read More &raquo;</a>
      </div>
    </div>
        {% endfor %}
    </div>
  </div>

for wagtail有一些默认字段,例如:first_published_at, last_published_at, latest_revision_created_at。查看更多内容官方文档 http://docs.wagtail.io/en/v2.0/reference/pages/model_reference.html#database-fields

class HomePage(Page):
  # get recent blogs (wagtail has by default first_published_at field)
  def get_recent_blogs(self):
    max_count = 5 # max count for displaying post
    return BlogPage.objects.all().order_by('-first_published_at')[:max_count]

  # add this to custom context 
  def get_context(self, request):
    context = super(HomePage, self).get_context(request)
    context['blogs'] = self.get_recent_blogs()
    return context
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wagtail - 仅在主页上显示三个最新帖子 的相关文章

随机推荐

  • Windows 服务的心跳活动

    我有许多 Windows 服务 用 C 4 0 编写 它们以不同的时间间隔连接到数据库并执行各种复杂的任务 其中一些任务每天仅每隔 X 小时发生一次 但是 服务器支持团队想知道 Windows 服务是否确实在运行 因为任务之间可能存在很大的
  • Logstash:是否可以将文档保存在内存中?

    我正在尝试将数据保存在内存中 以便能够在过滤器部分中快速检索 事实上 当我收到新文档时 我想检索以前的相关文档以计算一些新指标 谁能告诉我这是否可能 如果是 我怎样才能实现这一目标 非常感谢 Joe 实现这一目标最接近的方法是使用elast
  • 如何使用另一个表中的随机行更新表的每一行

    我正在构建我的第一个去识别脚本 但我的方法遇到了问题 我有一张桌子dbo pseudonyms whose firstname列填充有 200 行数据 此 200 行列中的每一行都有一个值 无空值 这个表还有一个id数字为 1 200 的列
  • React & Clarifai:未捕获的 ReferenceError:流程未定义

    我正在使用 Clarifai API 中的人脸检测模型构建一个 React 应用程序 当我import Clarifai from clarifai VS Code 提示我此警告 Could not find a declaration f
  • 如何使用python从gs存储桶中获取文件数量

    我想计算 gs 存储桶中的文件数量 该存储桶的文件夹名为我的文件管理器 假设项目名称为PrName存储桶名称是测试文件那么我如何使用 python 3 读取该存储桶中存在的文件数量 你可以使用方法 list blobs 在您的存储客户端上计
  • PHP自定义基于字符串出现次数的排序函数?

    假设我有一个数组 arr array Animal Dog Subject Physics Place Tokyo Sport Tennis 我想要usort具有以下标准 如果它包含tokyo排名第一 如果包含tennis排名第二 如果包含
  • JSON key 可以是字符串或对象

    我想解析一些 JSON 但其中一个键要么是字符串 要么是对象 这是我当前的结构 https github com PhillippOhlandt pmtoapib blob master CollectionItemRequest go L
  • 什么是 objc_msgSend 以及为什么它占用如此多的处理时间?

    我一直在分析我的回合制游戏应用程序 并且遇到了一个有趣的 也许 问题 根据下图 似乎objc msgSend占用了我的应用程序运行时间的近一分钟 这是什么 这是代码写得不好的标志吗 谢谢 正如 user1118321上面所说 objc ms
  • 在设计时设置复合 WF4 活动的内部属性

    我想创建一个复合 Windows 工作流活动 在 NET 4 下 其中包含预定义的 ReceiveAndSendReply 活动 有些属性是预定义的 但其他属性 特别是 ServiceContractName 需要在设计器中设置 我可以将其
  • 如何(正确)在 AWS Lambda 函数中使用外部凭证?

    我有一个用 Python 编写的 非常基本但工作完美 AWS lambda 函数 但是它具有要连接到的嵌入式凭据 1 外部网络服务 2 DynamoDB 表 该函数的作用相当基本 它针对服务发布登录信息 使用凭证 1 然后将部分响应状态保存
  • 有人可以解释一下这个 bash 命令吗?

    从网站上可以看到RVM https rvm io bash lt lt curl https rvm io releases rvm install head 第一个小于号有什么作用 关于 lt 我知道这是一个愚蠢的问题 但我很想了解这一点
  • 有关 XML 布局标签属性的 Android SDK 信息

    我正在研究 Android SKD 文档 我想知道在哪里可以找到有关定义应用程序界面布局时使用的 XML 标签属性的信息 例如安卓 名称 安卓 id class 片段标签的属性等 我在参考文档中找不到它们 该文档仅列出了 Java 类的文档
  • Django:ValueError:以 10 为基数的 int() 的文字无效:

    我正在尝试 django 中的一些东西 只是一个简单的表单 它将添加每次登录数据库的尝试 它导致 ValueError invalidliteral for int with base 10 我已经检查了很多问题 但无法克服此错误 我有这样
  • 真正的客户端 HTML 包括

    HTML 不支持客户端包含其他 HTML 例如使用 C 获取 include指示 相反 客户端 HTML 包含的主要工具似乎是iframe object 尤其是 jQuery 的 load See 这个线程 https stackoverf
  • 如何在HTML页面中播放视频

    我正在尝试在 HTML 页面上播放 mp4 视频 我搜索了网络并发现在 HTML5 中我可以使用video像下面这样的标签
  • 在 Clojure 中如何迭代直到达到固定点?

    我经常处于这样的位置 我的代码如下所示 iterate improve x 我正在寻找第一个值 该值不再比前一个值有所改进 两者都不filter nor take while帮助他们找到一个明显的解决方案 然而 我犹豫着要不要写出来 loo
  • mpld3:如何使用插件更改工具栏的位置?

    mpld3 显示的工具栏通常位于屏幕的右下角 我希望它位于屏幕的右上角 似乎可以找到控制工具栏位置的代码here https github com jakevdp mpld3 blob cec043807d18d788221455f1933
  • ElasticSearch - 使用 FilterBuilders

    我是 ElasticSearch 和 Couchbase 的新手 我正在构建一个示例 Java 应用程序来了解有关 ElasticSearch 和 Couchbase 的更多信息 正在阅读ElasticSearch Java API htt
  • 运行多个并发 GMainLoop

    是否允许 GLib 用户运行多个GMainLoop实例在多个线程中同时运行 每个线程运行自己的实例 我到处都找到了 是 和 否 的答案 我意识到这个问题之前已经在这个论坛上被问过 2011 年 12 月 https stackoverflo
  • Wagtail - 仅在主页上显示三个最新帖子

    我创建了一个模型来在主页上显示帖子 但只想显示三个最新帖子 我是否需要为此使用分页 或者是否有可以使用的挂钩 我想我可以使用分页 只是不包含 下一个 按钮 但这看起来有点像黑客 我想以正确的方式做到这一点 我对 Django 和 Pytho