8

Wagtail CMS で、特定のページへのリンクを作成する方法がわかりません。BlogIndexPageテンプレートに my から myへ、BlogIndexArchivePageまたはその逆の (固定された、作成されていない) リンクが必要です。公式ドキュメントのpageurlでは有望に見えます:

{% load wagtailcore_tags %}
...
<a href="{% pageurl self.blog_page %}">

の表記はわかりませんblog_pageが、やのpage-classesように名前が付けられています。リンク先のページを自分で定義する必要がありましたか? もしそうなら、どのように?BlogPageBlogIndexPagemodels.py

4

2 に答える 2

16

詳細な回答をする前に、簡単な提案をします。ブログ インデックスとブログ アーカイブ ページに と のような適切な 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 %}

于 2015-08-02T01:44:56.133 に答える
7

slugurl ははるかに簡単なはずです。例えば、{% slugurl 'blog_index'%}

pageurl には、質問テンプレートで使用できるページ オブジェクトが必要です。

于 2017-04-13T01:57:35.223 に答える