詳細な回答をする前に、簡単な提案をします。ブログ インデックスとブログ アーカイブ ページに と のような適切な URL を既に与えていると仮定する/blog/
と/blog/archive/
、それらが変更されると信じる理由はありますか? そうでない場合は、テンプレートにハードコーディングされ<a href="/blog/">
たリンクを記述して、忘れてください。取り締まりのように思えるかもしれませんが、特定のページをブログ インデックスとして指名する永続的な方法が必要になります。 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
、そのタイプのページが一度に 1 つだけサイトに存在することを暗示しています。それが実際に有効な仮定である場合、そのページを取得するための適切な Django 式は次のようになりますBlogIndexPage.objects.first()
。(これが有効な仮定でない場合は、サイトが特定の BlogIndexPage をブログ インデックスとして選択する方法を自分で決める必要があります。 )
テンプレートでそのページ オブジェクトを使用できるようにする必要があります。これを行う 1 つの方法は、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
これにより、テンプレートで variable として使用できるようになり、次のblog_index
ように記述できるようになります{% pageurl blog_index %}
。