我需要将模型数据(仅限CharField
s)写入XML文件,以包含flash文件的数据。我是新来的,我不太清楚在django做这件事的过程。我正在创建一个xml文件,然后将文本数据写入该文件(与csv模块一样,只是写入xml)。一个非常简单的xml文件应该可以让flash文件读取,即:
<?xml version="1.0" encoding="UTF-8"?>
<textFields>
<textField id="0" text="HELLO WORLD" />
<textField id="1" text="HELLO EARTH" />
...
</textFields>
一。我正在使用序列化程序从模型中写入xml数据:
from django.core import serializers
data = serializers.serialize('xml', myModel.objects.filter(instanceIwantTowrite), fields=('fieldName'))
2。然后我使用core.files
创建文件:
from django.core.files import File
f = open('/path/to/new/dir/content.xml', 'w')
myfile = File(f)
三。写入文件数据并关闭:
myfile.write(data)
myfile.close()
尽管xml输出包含对象“django objects”等的字段,但到目前为止这是可行的,我必须看看能否在ActionScript中为flash文件轻松地解释这一点。我更喜欢像在csv模块中那样手动定义xml字段名。由于我是django和python的新手,我想知道是否有一种更简单的方法来实现这一点?
注意:在序列化程序中,我对模型对象使用filter,因为对模型实例使用get
会返回一个object not iterable
错误。事实上,我过滤了两次才得到一个实例,似乎必须有更好的方法。
对于解决此问题的更通用方法,可以通过在模型上使用简单的duck punch来避免模板,并使用ElementTree将任何深层对象图序列化为XML。
我是这样解决的:
Monkey patch/duck punch models in your Model.py喜欢
这将向Model添加一个方法,该方法创建一个元素实例,其中包含您关心的模型中的字段,而不包含django cruft。
然后,要构造xml文档,请执行以下操作:
通过这种方法,您可以得到一个格式良好的xml文档,其中所有django模型字段都是属性,并构建一个n级的深层层次结构。每个xml节点都将被命名为与模型类相同的名称。
这里有两种可能的解决方案:
1.
您可以扩展基本django xml序列化程序(
django.core.serializers.xml_serializer.Serializer
),并对其进行修改,使其返回结构中的数据。然后你就可以跑前男友了它将在您的结构中输出数据。
2.
编写一个简单的函数,该函数将用您的数据结构呈现模板并以您的格式返回xml数据:
Python代码
模板xml_Template.xml
相关问题 更多 >
编程相关推荐