0

我正在尝试构建一个基于 Wagtail 教程的片段

我已经models.py在文件夹中构建了我的代码片段并创建了一个自定义模板标签,templatetags并将代码片段连接到Pagevia ForeignKey。我还创建了 html 模板并同时运行makemigrationsmigrate.

片段是标题图像和标题,出现在除主页之外的所有页面上。代码如下:

片段模型:

@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>]>

我究竟做错了什么?

4

2 回答 2

0

解决了这个问题。如果有人遇到类似的事情:

我在一个单独的模板上有模板标签,该模板正在加载到 base.html 中。带有 Snippet 标签的模板需要与模板相同Page

于 2017-05-14T18:34:45.553 回答
0

在 Visual Studio 代码中,关闭 VSC,然后再次打开它

于 2021-05-13T17:29:46.497 回答