假设我已经为我的网站创建了一个博客。 Wagtail管理员中的树形结构设置如下:
主页>博客索引>博客文章
是否可以将“博客索引”页面保留在管理页面树中,但将其从URL中删除,以使我的URL看起来像这样:
主页>博客文章
我正在向博客索引页面分配一个自定义组,允许他们仅编辑他们创建的博客帖子,这就是为什么博客索引需要保留在管理员方面的树中的原因。
我已经对routablepagemixin做了一些工作,但是并没有从URL中删除任何内容,只添加了它。
答案 0 :(得分:3)
我不确定RoutablePageMixin
是否是解决此问题的正确方法,但这就是我以前解决此问题的方式。
这是一个如何使用RoutablePageMixin
和route
进行操作的示例(注意:我很快将其切碎,并且没有对其进行测试,您可能需要进行一些调整)
from django.http import HttpResponseRedirect
from wagtail.contrib.routable_page.models import RoutablePageMixin, route
from wagtail.core.models import Page
from blog.models import BlogPage
class HomePage(RoutablePageMixin, Page):
"""A home page class."""
# HomePage Fields here...
# This route will collect the blog slug
# We'll look for the live BlogPost page.
@route(r"^(?P<blog_slug>[-\w]*)/$", name="blog_post")
def blog_post(self, request, blog_slug, *args, **kwargs):
try:
# Get the blog page
blog_page = BlogPage.objects.live().get(slug=blog_slug)
except BlogPage.DoesNotExist:
# 404 or post is not live yet
return HttpResponseRedirect("/")
except Exception:
# Handle your other exceptions here; here's a simple redirect back to home
return HttpResponseRedirect("/")
# Additional logic if you need to perform something before serving the blog post
# Let the blog post page handle the serve
return blog_page.specific.serve(request, *args, **kwargs)
另一件事要注意:您需要更改原始博客帖子页面上的站点地图URL,以使它们不会在/blog/blog-slug/
中显示为sitemap.xml
。