【发布时间】:2021-01-15 22:08:01
【问题描述】:
为了尝试只使用 Wagtail Page 树作为导航结构,我声明了以下内容,以便可以根据需要呈现链接而不是页面 url:
class Node(Page):
class Meta:
verbose_name = 'Node (no content or link)'
link = models.CharField(max_length=255, default='', blank='True', help_text='Optional. Leave blank if serving as a parent page')
content_panels = Page.content_panels + [
FieldPanel('link')
]
def get_url(self, **kwargs):
if self.link != '':
return self.link
else:
return super().get_url(self, **kwargs)
在模板中,我尝试了{{ item.url }} 和{{ item.specific.url }},其中item 是正在迭代的页面树中的一个项目。 Wagtail 的 Page.get_url() 函数定义的项目 url 总是被渲染,而我定义的 def get_url() 永远不会被执行。
我知道 Wagtail Menus,但试图在这个项目中没有其他依赖项,所以除了上述是否是最好的架构之外,我在让它工作时缺少什么?
为了跟进,我关注了these instructions,在class Node(Page) 模型上,我现在用以下内容代替了def get_url:
def get_url_parts(self, *args, **kwargs):
site_id, root_url, page_path = super().get_url_parts(*args, **kwargs)
# return an alternative page_path if link has a value
if self.link.strip() != '':
page_path = self.link
return site_id, root_url, page_path
我发现我仍然必须使用item.specific.get_url 呈现页面网址。 item.url 不起作用。
【问题讨论】:
标签: wagtail