Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 来自StreamField Wagtail的组块_Python_Django_Wagtail_Wagtail Streamfield - Fatal编程技术网

Python 来自StreamField Wagtail的组块

Python 来自StreamField Wagtail的组块,python,django,wagtail,wagtail-streamfield,Python,Django,Wagtail,Wagtail Streamfield,我想要实现的目标将更容易在列表中解释。 e、 g 我想对StreamField中的块进行分组,并将它们显示在按这些行分组的模板中。 在我的模型中有这样做的方法吗?或者我应该在模板中以某种方式完成它。。 我试着做: 在StreamField上按列表操作 解阻塞流场。。然后按列表操作 StreamField的值是一个类似列表的对象,类型为StreamValue。由于它不是一个真正的列表,它可能不支持切片-如果不支持,您可以通过使用list(self.body)(其中body是您的StreamFie

我想要实现的目标将更容易在列表中解释。 e、 g

我想对StreamField中的块进行分组,并将它们显示在按这些行分组的模板中。 在我的模型中有这样做的方法吗?或者我应该在模板中以某种方式完成它。。 我试着做:

  • 在StreamField上按列表操作
  • 解阻塞流场。。然后按列表操作

    • StreamField的值是一个类似列表的对象,类型为
      StreamValue
      。由于它不是一个真正的列表,它可能不支持切片-如果不支持,您可以通过使用
      list(self.body)
      (其中
      body
      是您的StreamField)将其转换为一个真正的列表来解决这个问题。执行此操作的一个好地方是页面的
      get\u context
      方法:

      def get_context(self, request):
          context = super().get_context(request)
      
          list_of_blocks = list(self.body)
          block_first_row = list_of_blocks[:3]
          block_rest_rows = [list_of_blocks[i:i+4] for i in range(3, len(list_of_blocks), 4)]
          block_rows = block_rest_rows.insert(0, block_first_row)
          context['block_rows'] = block_rows
      
          return context
      
      然后,您可以访问模板中的
      block\u行

      {% for block_row in block_rows %}
          <div class="row">
              {% for block in block_row %}
                  render block as normal, with {% include_block block %} or otherwise
              {% endfor %}
          </div>
      {% endfor %}
      
      {block_rows%}
      {块中的块的%u行%}
      使用{%include_block%}或其他方式以正常方式渲染块
      {%endfor%}
      {%endfor%}
      
      StreamField的值是一个类似列表的对象,类型为
      StreamValue
      。由于它不是一个真正的列表,它可能不支持切片-如果不支持,您可以通过使用
      list(self.body)
      (其中
      body
      是您的StreamField)将其转换为一个真正的列表来解决这个问题。执行此操作的一个好地方是页面的
      get\u context
      方法:

      def get_context(self, request):
          context = super().get_context(request)
      
          list_of_blocks = list(self.body)
          block_first_row = list_of_blocks[:3]
          block_rest_rows = [list_of_blocks[i:i+4] for i in range(3, len(list_of_blocks), 4)]
          block_rows = block_rest_rows.insert(0, block_first_row)
          context['block_rows'] = block_rows
      
          return context
      
      然后,您可以访问模板中的
      block\u行

      {% for block_row in block_rows %}
          <div class="row">
              {% for block in block_row %}
                  render block as normal, with {% include_block block %} or otherwise
              {% endfor %}
          </div>
      {% endfor %}
      
      {block_rows%}
      {块中的块的%u行%}
      使用{%include_block%}或其他方式以正常方式渲染块
      {%endfor%}
      {%endfor%}