redirect - 使用 RoutablePageMixin 显示给定类别
问题描述
在我的目录应用程序中,我希望定义“路线”和模板,因此当我单击 PaintingDetailPage 中的给定类别时,它会重定向到 PaintingIndexPage 并显示该类别下的所有详细信息页面。我可以迁移,在 Admin 中输入输入并将其显示在 PaintingDetailPage 上...但是,当我单击一个类别时,它打开了 PaintingIndexPage 并显示所有项目,无论它们的类别...我找不到错误...
我在我的博客应用程序中应用了完全相同的代码,它工作得很好。我可以按类别显示项目...但是当我将完全相同的代码复制到 Calalog 应用程序时它不起作用(在修改页面的名称、模型等时)我假设我错过了一个错字(或更大的问题?)...但我找不到它。
任何输入将不胜感激。
这是我的代码:
模型.py:
class PaintingIndexPage(RoutablePageMixin, Page):
template = "catalog/painting_index_page.html"
max_count = 1
subtitle = RichTextField(
...
content_panels = ...
def get_context(self, request, *args, **kwargs):
"""Adding custom stuff to our context."""
context = super().get_context(request, *args, **kwargs)
# Get all posts
paintings = PaintingDetailPage.objects.live().public().order_by('-first_published_at')
if request.GET.get('tag', None):
tags = request.GET.get('tag')
paintings = paintings.filter(tags__slug__in=[tags])
paginator = Paginator(paintings, 20)
# Try to get the ?page=x value
page = request.GET.get("page")
try:
paintings = paginator.page(page)
except PageNotAnInteger:
paintings = paginator.page(1)
except EmptyPage:
paintings = paginator.page(paginator.num_pages)
context["paintings"] = paintings
context["categories"] = PaintingCategory.objects.all()
return context
return render(request, "catalog/painting_index_page.html", context)
@route(r"^category/(?P<cat_slug>[-\w]*)/$", name="category_view")
def category_view(self, request, cat_slug):
context = self.get_context(request)
try:
category = PaintingCategory.objects.get(slug=cat_slug)
except Exception:
category = None
if category is None:
pass
context["paintings"] = PaintingDetailPage.objects.live().public().filter(categories__in=[category])
return render(request, "catalog/painting_index_page.html", context)
详细视图:
class PaintingDetailPage(Page):
template = "catalog/painting_detail_page.html"
parent_page_types = ["catalog.PaintingIndexPage"]
subtitle = ...
tags = ClusterTaggableManager(through="catalog.PaintingPageTag", blank=True)
categories = ParentalManyToManyField("catalog.PaintingCategory", blank=True)
...
content_panels = Page.content_panels + [
ImageChooserPanel("image"...
MultiFieldPanel([
FieldPanel('categories', widget=forms.CheckboxSelectMultiple),
],
heading="Category",
classname="collapsible collapsed",
),
详细模板:
% extends "base.html" %}
{% 加载 wagtailimages_tags wagtailcore_tags %}
{% block content %} {% image self.image fill-1200x300 as banner %}
<div class="container mt-5 mb-5">
<div class="text-center">
<h1>{{ self.title }}</h1>
{% if self.categories.count %}
<div style="padding: 0 20px 20px">
{% for cat in self.categories.all %}
<a href="?category={{ cat.slug }}">
{{ cat.name }}
</a>{% if not forloop.last %}, {% endif %}
{% endfor %}
</div>
{% endif %}
</div>
</div>
</div>
<h2>Categories</h2>
<ul>
{% for cat in self.categories.all %}
<li>
<a href="{{ self.get_parent.url }}?category={{ cat.slug }}">
{{ cat.name }}
</a>
</li>
{% endfor %}
</ul>
...
{% 端块 %}
解决方案
推荐阅读
- xamarin - 在自己的设备上调试 xamarin 项目时部分 UI 消失
- r - 过滤后数据帧的级别
- python - 座位安排 - 我如何只选择邻居组合
- javascript - AadTokenProvider 从旧用户返回访问令牌
- python - 应用公式有效地获取 Numpy 矩阵
- reactjs - 在 Material UI Primary Color Theme 中使用三种以上的颜色
- javascript - 如何在 JavaScript 中将文本拆分为具有不同格式的数组
- python-3.x - 从 Kivy/KivyMD 的自定义列表中获取复选框的状态
- python - 在烧瓶 api 中实际响应之前发送确认消息
- c++ - QML 图像:运行已部署的应用程序时不支持 jpg 的图像格式