2015-04-02 70 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前面。