2

我有一个这样的模型:

from wagtail.wagtailcore.models import Page

class Blog(Page):
    created = models.DateTimeField(auto_now_add=True)
    ...
    ..

现在,我的默认设置是,如果我的 slug 是hi-there,则可以访问博客文章,site_url:/hi-there/但我希望通过site:url/2014/02/05/hi-there/该页面访问它有多种方法,例如url, url_path我应该覆盖哪个方法,以及在 wagtail 中实现此类目标的最佳实践是什么?

4

2 回答 2

5

RoutablePageMixin是当前 (v2.0+) 实现此目的的方法

将模块添加到已安装的应用程序中:

INSTALLED_APPS = [
   ...

   "wagtail.contrib.routable_page",
]

继承自wagtail.contrib.routable_page.models.RoutablePageMixinand wagtail.core.models.Page,然后定义一些视图方法并用wagtail.contrib.routable_page.models.route装饰器装饰它们:

from wagtail.core.models import Page
from wagtail.contrib.routable_page.models import RoutablePageMixin, route

class EventPage(RoutablePageMixin, Page):
    ...

    @route(r'^$') # will override the default Page serving mechanism
    def current_events(self, request):
        """
        View function for the current events page
        """
        ...

    @route(r'^past/$')
    def past_events(self, request):
        """
        View function for the past events page
        """
        ...

    # Multiple routes!
    @route(r'^year/(\d+)/$')
    @route(r'^year/current/$')
    def events_for_year(self, request, year=None):
        """
        View function for the events for year page
        """
        ...
于 2018-05-14T19:52:23.400 回答
2

Wagtail v0.5 中的新功能是一种直接解决此类问题的机制:

在 v1.3.1 中在 Pages或RouterablePage嵌入 URL 配置

(文档甚至有一个博客示例!)

于 2014-08-13T08:51:11.200 回答