在Django中将模板标记解析为XML

时间:2014-07-01 08:43:32

标签: python django django-templates django-database

我正在尝试从数据库中获取一些值并动态打印到xml中。

这是我的模特:

class Somemodel(models.Model):
    Party_Id = models.CharField(max_length=500)
    Label = models.CharField(max_length=500)
    Party_Id = models.CharField(max_length=500)
    Name = models.CharField(max_length=500)

这是我的观看功能

def xmlcontent(request):
  obj = Somemodel.objects.get(pk=1)
  obj.Party_Id = obj.pk
  pprint.pprint(obj.DDEX_Party_Id)
  return render(request, "content.xml", {"DDID": "obj"},
content_type =   "application/xhtml+xml")

我的content.xml看起来像这样

<?xml version="1.0" encoding="UTF-8"?><br/>
<</MessageHeader>MessageHeader><br/>
    {% for i in DDID %}<br/>
        {{ i.pk }}<br/>
    {% endfor %} <br/>
<</MessageHeader>/MessageHeader><br/>

它假设打印Party_id但不打印..我错过了什么?

2 个答案:

答案 0 :(得分:0)

一些问题:

  1. 您正在上下文词典中发送字符串"obj"而不是对象obj
  2. 在您的xml模板中,您有一个循环,但上下文变量DDID将是单个对象,而不是集合或查询集,因为您使用的是.get
  3. 您的XML中有额外的<,而XML不包含<br />标记。生成的文件无效。
  4. 为了省去一些麻烦,只需使用内置的serializers即可。第一个示例向您展示如何导出XML:

    from django.core import serializers
    
    def some_method(request):
        XMLSerializer = serializers.get_serializer("xml")
        xml_serializer = XMLSerializer()
        xml_serializer.serialize(SomeModel.objects.filter(pk=1).values('id'), stream=request)
    

答案 1 :(得分:0)

使用此行

return render(request, "content.xml", {"DDID": "obj"},

您将字符串"obj"传递给模板而不是obj对象。将其更新为

return render(request, "content.xml", {"DDID": obj},

此外obj不是列表而是单个对象,因此您无法使用{%for i in DDID %} ...