gpt4 book ai didi

wagtail - 链接到Wagtail CMS中的特定页面

转载 作者:行者123 更新时间:2023-12-04 16:52:01 25 4
gpt4 key购买 nike

在Wagtail CMS中,我不知道如何构建指向特定页面的链接。我想要模板中从BlogIndexPageBlogIndexArchivePage的(固定的,未创作的)链接,反之亦然。
在官方文档中pageurl看起来很有希望:

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

但我不理解 blog_page的表示法,但是 page-classes的名称类似于 BlogPageBlogIndexPage。我是否必须在 models.py中定义要链接到的页面-如果是这样:如何?

最佳答案

在给出详细答案之前,我将提出一个简单的建议:假设您已经给您的博客索引和博客存档页面提供了诸如/blog//blog/archive/的明智的URL,是否有任何理由相信它们将会改变?如果没有,那么只需在模板上写一个硬编码的<a href="/blog/">链接,然后就不用管它了。这似乎是一个解决方案,但是您将需要一种持久的方式来指定特定页面作为博客索引-无论是基于页面类型,ID还是站点结构中的位置-并通过URL可能比您能想到的任何其他机制更明智,更适合 future 。毕竟,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 %}

关于wagtail - 链接到Wagtail CMS中的特定页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31766186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com