如何添加Wagtail博客类别作为页眉和页脚的链接



我正在用帖子和帖子类别构建简单的博客。我想将链接添加到标题和页脚的帖子类别,以便它们出现在每个页面上,而不仅仅是主页(作为可路由的页面)。我该怎么做呢?

分类类如下:

class BlogCategory(models.Model):
title = models.CharField( # field name has to be 'title'
verbose_name='Name', max_length=30, unique=True)
slug = AutoSlugField( populate_from='title', editable=True)
panels = [
MultiFieldPanel([
FieldPanel("title"),
FieldPanel("slug"),
], heading="New Category"),]
def __str__(self):
return self.title

可路由页面代码:

class BlogIndexPage(RoutablePageMixin, Page):
class Meta:
verbose_name = "Blog Index Page"
template = "blog/blog_index_page.html"
parent_page_types = ["wagtailcore.Page"]
subpage_types = ["blog.PostArticlePage"]
max_count = 1
# context ------------------------------
def get_context(self, request, *args, **kwargs):
context = super().get_context(request, *args, **kwargs)
all_posts = (
BlogDetailPage.objects.live().public().order_by("-first_published_at")
)
context["posts"] = all_posts
@route(r"^category/(?P<cat_slug>[-w]*)/$", name="category_view")
def category_view(self, request, cat_slug):
context = self.get_context(request)
try:
category = BlogCategory.objects.get(slug=cat_slug)
except Exception:
return redirect(self.url)
if category is None:
return redirect('/')
context["posts"] = (BlogDetailPage.objects.live().public().filter(categories__in=[category]))
return render(request, "blog/blog_view_page.html", context)

在页眉和页脚添加博客类别:

首先创建一个简单的模板标签
register = template.Library()
@register.simple_tag()
def get_categories():
return BlogCategory.objects.all()

接下来添加以下代码到页眉和页脚

{% load blog_tags %}
{% get_categories as categories %}
<nav>
<ul>
{% for cat in categories %}
<li><a href="category/{{ cat.slug }}">{{ cat.title }}</a></li>
{% endfor %}
</ul>
</nav>

最后,重新加载服务器。

从这里试试:

{% regroup object_list by category as post_list %}
<ul>
{% for post_category in post_list %}
<li>{{ post_category.grouper }}
<ul>
{% for post in post_category.list %}
<li>{{ post.title }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}

你可能需要稍微修改一下,但主体是一样的。

regroup标签在Django文档中有很好的解释,Wagtail文档明确提到他们支持Django标签。

最新更新