在给出详细答案之前,我会提出一个简单的建议:假设您已经为博客索引和博客存档页面提供了合理的 URL,例如/blog/
and /blog/archive/
,有什么理由相信他们是ever会改变吗?如果没有,那就写一个硬编码<a href="/blog/">
链接到您的模板上,然后忘记它。这可能看起来像是一种逃避,但你需要some将特定页面指定为博客索引的持久方式(无论是基于页面类型、ID 还是站点结构中的位置),通过 URL 进行此操作可能比您可以想到的任何其他机制更明智且面向未来和。毕竟,URL 应该是持久标识符......
好的。详细答案:
在示例中pageurl
文档,self.blog_page
只是一个引用 a 的变量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
object.
当你谈论“我的BlogIndexPage
”,您暗示该类型的页面在任何时候都将存在于您的网站上。如果这确实是一个有效的假设,那么用于检索该页面的合适 Django 表达式将是:BlogIndexPage.objects.first()
。 (如果这不是一个有效的假设,那么您需要自己决定您的网站将如何选择一个特定的 BlogIndexPage 作为the博客索引。)
您现在需要使该页面对象在您的模板上可用。做到这一点的一种方法是通过get_context
method:
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 %}
.