2015-04-02 71 views
1

我正在python中生成一個xml文件,我需要將它保存到我的plone站點,但我不確定如何。將文件保存到plone網站使用python

def generate_sitemap_index_file(self, sites): 
    """ Generate a google sitemap index file 
    """ 
    root = ET.Element("sitemapindex") 

    for site in sites: 
     sitemap = ET.SubElement(root, "sitemap") 
     loc = ET.SubElement(sitemap, "loc") 
     loc.text = self.aq_parent.absolute_url() + "/googlesitemap/" + site 

    ET.ElementTree(root).write("sitemap_index.xml") 

此功能將文件保存到我的zinstance文件夾,但Zope是沒有意識到這一點。

回答

3

您可以創建一個名爲File in Plone的內容對象。 見:http://docs.plone.org/external/plone.api/docs/content.html#create-content

這裏的untestet例子給你一個猜測:

# -*- coding: utf-8 -*- 

from zope.site.hooks import setSite 
from plone.namedfile.file import NamedBlobFile 
from plone import api 
import transaction 

portal = app["Plone"] # Plone is your Plone site in Zope root 
setSite(portal) 

container = portal 
# create the file object: 
file_obj = api.content.create(       
    container, 'File', 
    id='sitemap_index.xml',        
    title='sitemap_index.xml', 
    safe_id=True 
)    

# attache the file to the file object: 
file_obj.file = NamedBlobFile(       
    data=your_file_handle,         
    contentType='application/xml',     
    filename='sitemap_index.xml',    
) 
transaction.commit() 

確保您已經添加plone.api在buildout.cfg雞蛋的一部分! 該腳本可以從命令行運行:

./bin/instance run your_script.py 

但作爲一個側面說明,你可以讓Plone的你創造一個sitemap_index.xml.gz,只是使其能夠在site_setup>主。

+0

「your_file_handle」需要什麼數據類型?例如如果我有另一個NamedBlobFile「文件」,應file.data工作? – 2016-02-06 01:28:20

1

我不確定你是否真的需要將這個文件看作是一個Plone內容。在調用http://something/sitemap_index.xml

您可以簡單地將它作爲ZMI文件從ZMI中添加(這樣文件將可用,但不會成爲CMS內容),或者使用Apache/NGIX在Plone前面。