Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Wagtail-仅在主页上显示三篇最新文章_Django_Pagination_Limit_Posts_Wagtail - Fatal编程技术网

Django Wagtail-仅在主页上显示三篇最新文章

Django Wagtail-仅在主页上显示三篇最新文章,django,pagination,limit,posts,wagtail,Django,Pagination,Limit,Posts,Wagtail,我已经创建了一个模型来在主页上显示帖子,但只想显示最新的三篇帖子。我需要为此使用分页还是有一个钩子可以替代 我想我可以使用分页,只是不包括“下一步”按钮,但这似乎有点像黑客,我想这样做的权利 我对Django和Python仍然很陌生,并将继续进行实验,但如果有人能为我指出正确的方向,我将非常感激 以下是主页模型: from __future__ import unicode_literals from django.db import models from wagtail.wagtailc

我已经创建了一个模型来在主页上显示帖子,但只想显示最新的三篇帖子。我需要为此使用分页还是有一个钩子可以替代

我想我可以使用分页,只是不包括“下一步”按钮,但这似乎有点像黑客,我想这样做的权利

我对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
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"),
]
以下是博客页面模型:

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
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>

{page.blogs%%中的blog为%s}
{{blog.body | richtext | truncatewords_html:50}
{%endfor%}
如中所述,您可以使用数组切片语法来限制查询集:

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

对于
wagtail
,有一些默认字段,例如:
first\u published\u at
last\u published\u at
last\u revision\u created\u at
。在中查看更多信息


谢谢@gasman-谁知道会这么简单!我在这里学习的是“手握拳头”,参考链接帮助很大!再次感谢。