将XML呈现为视图

15

情况如下。

我从一个网站(假设为A)获取一个atom文件。第三方将通过我的网站(假设为B)请求此atom文件。

我正在编写一个Django应用程序,它将频繁地轮询网站A并将其存储为文件。现在,当第三方通过网站B请求该文件时,我将不得不在浏览器中将该文件显示为xml。

我的问题是,如何在Django视图中呈现整个xml文件?

 render_to_response

需要一个模板,但我不能直接使用模板。我只需要在视图中显示文件。我该怎么做?

5个回答

21

您只需使用 content_type 参数定义 MIME 类型为 'text/xml'

return HttpResponse(open('myxmlfile.xml').read(), content_type='text/xml')

18

请执行以下操作:

return render(request, 'myapp/index.html', {"foo": "bar"}, content_type="application/xhtml+xml")

myapp/index.html是一个模板,对吧?我没有像foo->bar这样的变量。我只有一个XML文件。我需要使用类似于return render(request,“myxmlfile.xml”)这样的东西。这个XML文件不是一个模板,而是一个有效的XML文件。 - vkris

6

如果您不想渲染模板,请不要这样做。 render 只是渲染模板的快捷方式。如果您只想显示文本,只需将其传递到 HttpResponse 中。

由于您的数据在文件中,因此可以这样做:

return HttpResponse(open('myxmlfile.xml').read())

虽然您应该注意并发问题,如果有多个人同时访问您的网站。


谢谢澄清。那么,处理这种情况的最佳方法是什么? - vkris
对我没用。显示了一个“模块对象不可调用”的错误。 silent1mezzo的答案似乎可以正常工作。 - Indradhanush Gupta
你如何解决并发问题? - steak_Overcooked

4
return render(request, 'products.xml', content_type='text/xml')

render函数也可以使用;你需要像jdelos的回答一样添加content_type='text/xml'即可。


2

只需使用content_type参数将MIME类型定义为“text / xml”即可。

return render(request,'xmltemplate.xml',{'foo':'bar'},content_type ='text / xml')

如果需要,可以在xmltemplate.xml中呈现变量。

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <foo>{{ foo }}</foo>
</note>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接