我正在尝试构建一个基于 Wagtail 教程的片段。
我已经models.py
在文件夹中构建了我的代码片段并创建了一个自定义模板标签,templatetags
并将代码片段连接到Page
via ForeignKey
。我还创建了 html 模板并同时运行makemigrations
和migrate
.
片段是标题图像和标题,出现在除主页之外的所有页面上。代码如下:
片段模型:
@register_snippet
class HeroImage(models.Model):
text = models.CharField(max_length=255)
image = models.ForeignKey(
'wagtailimages.Image',
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name='+'
)
panels = [
FieldPanel('text'),
ImageChooserPanel('image'),
]
def __str__(self):
return self.text
片段自定义模板标签:
@register.inclusion_tag('hero_image.html', takes_context=True)
def hero_images(context):
self = context.get('self')
if self is None or self.depth <= 2:
hero = ()
else:
hero = HeroImage.objects.all()
return {
'hero': hero,
'request': context['request'],
}
连接到页面的片段:
class MenuPage(Page):
hero = models.ForeignKey(
'home.HeroImage',
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name='+'
)
content_panels = Page.content_panels + [
SnippetChooserPanel('hero'),
]
我创建了两个片段并在管理界面的我的页面中选择了一个。在模板中,我尝试了许多对 Snippet 的不同调用,但它们都没有返回任何内容。我试过的电话包括:
{{ page.hero }}
{{ page.hero.text }}
{{ hero.text }}
{{ page.hero_images }}
{{ page.hero_images.text }}
Etc...
不幸的是,没有任何工作,我唯一设法开始工作的就是输入{{ hero }}
which 返回<QuerySet [<HeroImage: Lorem Ipsum One>, <HeroImage: Lorem Ipsum Two>]>
我究竟做错了什么?