【问题标题】:Django - for loop in one lineDjango - 一行中的for循环
【发布时间】:2022-01-22 05:14:15
【问题描述】:

我正在将所有产品详细信息从 db 导出到 XML 文件。需要导出的字段之一是图像。有两个应该导出图像的字段。如果有一张图片(产品表)应该导出到item_image_link。如果有多个(ProductImage 表)到item_additional_image_link

products = Product.objects.filter(product_status=True).prefetch_related('images')

for product in products:
    item = ET.SubElement(channel, "item")
    g_item_id = ET.SubElement(item, ("{http://base.google.com/ns/1.0}id")).text = product.sku
    g_item_image_link = ET.SubElement(item, ("{http://base.google.com/ns/1.0}image_link")).text = 'http://127.0.0.1:8000'+products.image.url
    for image in product.images.all():
        g_item_additional_image_link = ET.SubElement(item, ("{http://base.google.com/ns/1.0}additional_image_link")).text = 'http://127.0.0.1:8000'+image.image.url

我已成功导出各个字段 item_additional_image_link 中每个产品的图像,但是根据 db 中的图像数量,它们显示在三个不同的行中。

<item>
  <g:id>55555</g:id>
  <g:additional_image_link>http://127.0.0.1:8000/media/photos/2021/12/20/K003-min.jpeg</g:additional_image_link>
  <g:additional_image_link>http://127.0.0.1:8000/media/photos/2021/12/20/K009-min.jpeg</g:additional_image_link>
  <g:additional_image_link>http://127.0.0.1:8000/media/photos/2021/12/20/image00024-min.jpeg</g:additional_image_link>
</item>

如何将上面的三行合二为一,每张图片之间用逗号分隔?比如:

<item>
  <g:id>55555</g:id>
  <g:additional_image_link>http://127.0.0.1:8000/media/photos/2021/12/20/K003-min.jpeg, http://127.0.0.1:8000/media/photos/2021/12/20/image00024-min.jpeg, http://127.0.0.1:8000/media/photos/2021/12/20/K009-min.jpeg</g:additional_image_link>
</item>

谢谢

【问题讨论】:

    标签: django xml for-loop


    【解决方案1】:

    在创建 ET.SubElement(...) 之前构建值

    additional_image_links = ",".join([f"http://127.0.0.1:8000{x.image.url}" for x in product.images.all()])
    if additional_image_links:
        g_item_additional_image_link = ET.SubElement(item, ("{http://base.google.com/ns/1.0}additional_image_link")).text = additional_image_links
    

    【讨论】:

      【解决方案2】:

      您需要在多个文本字段上使用字符串方法.join 将它们合并为一个,然后生成单个 XML 元素。我猜是关于外星人的……

      g_item_image_link = ET.SubElement(item, ("{http://base.google.com/ns/1.0}image_link")
          ).text = 'http://127.0.0.1:8000'+products.image.url
      
      texts = []
      for image in product.images.all():
          texts.append( 'http://127.0.0.1:8000'+image.image.url )
      
      if texts: # don't generate an empty element
          g_item_additional_image_link = ET.SubElement(item, ("{http://base.google.com/ns/1.0}additional_image_link")
              ).text = ', '.join( texts)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-29
        • 2012-07-05
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        • 2014-03-21
        • 2021-10-17
        • 2012-05-10
        相关资源
        最近更新 更多