【问题标题】:Wagtail SnippetChooserBlock in StreamfieldStreamfield 中的 Wagtail SnippetChooserBlock
【发布时间】:2016-10-29 06:28:34
【问题描述】:

我在从 sn-p 获取值时遇到了一些问题,我已使用 Snippet Chooser Block 将其包含到流场中。

生物片段:

@register_snippet
class BioSnippet(models.Model):
    name = models.CharField(max_length=200, null=True)
    job_title = models.CharField(max_length=200, null=True, blank=True)
    bio = RichTextField(blank=True)
    image = models.ForeignKey(
        'wagtailimages.Image',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+',
        verbose_name='Bio Image'
    )
    contact_email = models.CharField(max_length=50, null=True, blank=True)
    contact_phone = models.CharField(max_length=50, null=True, blank=True)

    panels = [
        FieldPanel('name'),
        FieldPanel('job_title'),
        FieldPanel('bio'),
        ImageChooserPanel('image'),
        FieldPanel('contact_email'),
        FieldPanel('contact_phone'),
    ]

    def __str__(self):
        return self.name

    class Meta:
        ordering = ['name',]

生物流场定义:

class BioInline(StructBlock):
    bio = SnippetChooserBlock(BioSnippet)

class BioBlock(StructBlock):
    overall_title = CharBlock(required=False)
    bios = ListBlock(BioInline())

这一切都有效,但是当我进入模板时,我似乎无法访问 sn-p 的值

{% for b in child.value.bios %}
    {{ b }}

    <hr>
    {{ b.name }}

{% endfor %}

{{ b }} 标签输出:

bio
Sales Team

但是 {{ b.name }} 什么也不输出。 {{ b.values.name }} 或我能猜到的任何其他排列也没有。我怀疑这些值并没有被拉低。

【问题讨论】:

    标签: python django wagtail wagtail-streamfield wagtail-snippet


    【解决方案1】:

    bios 这里定义为BioInline 值的列表,因此模板中的b 将是BioInline 值 - 它有一个属性bio(给你实际的@987654326 @ 目的)。因此,要获得名称,您必须使用:{{ b.bio.name }}

    我认为BioInline 对象实际上并没有给你带来任何好处——你可以将BioBlock 定义为:

    class BioBlock(StructBlock):
        overall_title = CharBlock(required=False)
        bios = ListBlock(SnippetChooserBlock(BioSnippet))
    

    这将使bios 成为BioSnippets 的列表 - 然后{{ b.name }} 将按预期工作。

    【讨论】:

      【解决方案2】:

      或者,您可以使用 self.bios

      在 blocks.py 中你必须导入 Snippet 模型(应该已经准备好了):

      from thebioapp.models import BioSnippet
      

      然后在模板本身中使用这个模型

      {% for b in self.bios %}
          {{ b }}
      
          <hr>
          {{ b.name }}
      
      {% endfor %}
      

      这篇文章很旧,但随着 Wagtail 越来越受欢迎,我希望这对其他人有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-31
        • 1970-01-01
        • 2018-04-30
        • 1970-01-01
        • 2019-01-21
        • 2019-07-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多