我正在將所有產品詳細資訊從 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>
謝謝
uj5u.com熱心網友回復:
在創建之前建立價值 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
uj5u.com熱心網友回復:
您需要對.join多個文本欄位使用字串方法將它們合并為一個,然后生成單個 XML 元素。我猜ET...
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/388292.html
