在给出详细答案之前,我先提出一个简单的建议:假设您已经为您的博客索引和博客存档页面提供了合理的 URL,例如/blog/
和/blog/archive/
,是否有理由相信它们会改变?如果没有,那么只需在您的模板上写一个硬编码的<a href="/blog/">
链接就可以了。这似乎是一种逃避,但您将需要一些持久的方法来提名特定页面作为博客索引 - 无论是基于页面类型、ID 还是站点结构中的位置 - 并通过以下方式做到这一点URL 可能比您想出的任何其他机制都更明智和面向未来。URL 应该是持久性标识符,毕竟......
好的。详细答案:
在pageurl
文档的示例中,self.blog_page
它只是一个引用Page
对象的变量。如果您有这样的设置,您将使用它blog_page
,您的页面的字段在哪里,指向其他页面:
class ExamplePage(Page):
body = RichTextField()
blog_page = models.ForeignKey('wagtailcore.Page')
content_panels = Page.content_panels + [
FieldPanel('body'),
PageChooserPanel('blog_page'),
]
但是,在您的情况下,您希望以编程方式确定链接页面,而不是创作页面内容的一部分,因此您需要一些其他方式来获取相关Page
对象。
当您谈论“我的BlogIndexPage
”时,您的意思是在任何时候您的网站上都将存在一个该类型的页面。如果这确实是一个有效的假设,那么用于检索该页面的合适 Django 表达式将是BlogIndexPage.objects.first()
:(如果这不是一个有效的假设,那么您需要自己决定您的网站将如何选择一个特定的BlogIndexPage 作为博客索引。)
您现在需要使该页面对象在您的模板上可用。一种方法是通过一种get_context
方法:
class ExamplePage(Page):
body = RichTextField()
def get_context(self, request):
context = super(ExamplePage, self).get_context(request)
context['blog_index'] = BlogIndexPage.objects.first()
return context
这使得它可以作为变量在模板上使用blog_index
,允许您编写:{% pageurl blog_index %}
.