【问题标题】:How to get the values from a Wagtail CMS Stream field panel using Django Models?如何使用 Django 模型从 Wagtail CMS 流字段面板中获取值?
【发布时间】:2020-12-30 05:42:05
【问题描述】:

我正在使用 wagtail CMS、Django、Postgresql 构建一个网页,并且在页面底部,我正在构建一个使用分页显示视频的部分。

我正在尝试使用 all_posts = MultiBlogPage.objects.values("all_blogs_content_pages") 从 Django 模型中检索数据

我得到的输出是

<PageQuerySet [{'all_blogs_content_pages': 
[
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ee2d21d0>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ed8fa2e8>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35f617e6a0>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ed90aac8>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ed90af60>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ed90a978>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ed90ae48>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ee2b9320>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ee2b9630>,
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ee339f28>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ee339470>
]}]>

有人可以看看我下面的代码,让我知道如何从 Django 模型中获取确切的值吗?

def get_context(self, request, *args, **kwargs):
    context = super(MultiBlogPage, self).get_context(request, *args, **kwargs)
    context['multiblog_page'] = self
    
    // The name of the stream field panel is "all_blogs_content_pages"
    all_posts = MultiBlogPage.objects.values("all_blogs_content_pages")

    print("all_posts...",all_posts)

    paginator = Paginator(all_posts, 3)
    print("paginator", paginator)
    page = request.GET.get("page")

    try:
        posts = paginator.page(page)        
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)
    
    context["posts"] = posts
    return context

【问题讨论】:

    标签: python django postgresql django-models wagtail-streamfield


    【解决方案1】:

    Wagtail 模型可以像标准 django 模型一样使用,因此似乎不需要将模型转换为字典列表。

    live(),仅过滤已发布的版本,specific() 从您的 models.py 而非基础 Page 类中获取实际模型。

    def get_context(self, request, *args, **kwargs):
        context = super(MultiBlogPage, self).get_context(request, *args, **kwargs)
        context['multiblog_page'] = self
        
        // The name of the stream field panel is "all_blogs_content_pages"
        all_posts = MultiBlogPage.objects.live().specific()
    
        print("all_posts...",all_posts)
    
        paginator = Paginator(all_posts, 3)
        print("paginator", paginator)
        page = request.GET.get("page")
    
        try:
            posts = paginator.page(page)        
        except PageNotAnInteger:
            posts = paginator.page(1)
        except EmptyPage:
            posts = paginator.page(paginator.num_pages)
        
        context["posts"] = posts
        return context
    

    模板.html

    <li>
      {{ post.all_blogs_content_pages }}
    </li>
    

    【讨论】:

    • 感谢您的回答。很有帮助
    猜你喜欢
    • 2020-07-07
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2011-02-04
    相关资源
    最近更新 更多