【问题标题】:django rest framework - XML formattingdjango rest 框架 - XML 格式化
【发布时间】:2014-01-17 20:38:52
【问题描述】:

谁能解释一下为什么 XML 的格式在浏览器中看起来很棒 -

<job id="blah" name="string2" master="string3" dbversion="string4" xmlversion="string5">
    <jobmst>
        <jobmst_id>10081</jobmst_id>
        <jobmst_type>2</jobmst_type>
        <jobmst_prntid>blah blah</jobmst_prntid>
        <jobmst_active>Y</jobmst_active>
        .......

但是当我保存输出,或者对页面进行 CURL 时,它显示为未格式化?

<job id="blah" name="string2" master="string3" dbversion="string4" xmlversion="string5"><jobmst><jobmst_id>10081</jobmst_id><jobmst_type>2</jobmst_type><jobmst_prntid>blah blah</jobmst_prntid><jobmst_active>Y</jobmst_active>

edit - 我在这里学到了一些东西。 Django 在浏览器中将其格式化为 XML(很好),但源代码未格式化,所以我需要一个单独的下载功能来实际格式化它以供下载?

【问题讨论】:

  • 浏览器中的输出是否带有前面的 + 符号,可用于单击 xml 树的打开部分?
  • 确实如此,实际上我刚刚更新了我的问题。如果我很少使用源代码,那就是一行,这意味着 django 正在浏览器上对其进行内联格式化。这告诉我,我需要一个单独的视图来导出到 XML,而不是让用户右键单击/保存,这只是保存源,因此 1 行未格式化?

标签: python xml django django-rest-framework


【解决方案1】:

提供的 XML 未格式化完全没问题。这样可以节省一些带宽。

浏览器在显示 XML 时正在为您格式化。大多数编辑器都允许您在打开 XML 进行查看时对其进行格式化。

在linux/unix中,你也可以format XML on the command line用curl获取后。

我不认为 Django REST Framework 允许您开箱即用地漂亮地打印 XML。 JSON 渲染器有一个indent 选项,但我找不到用于 XML 的选项。如果需要,您可以写一个custom pretty-printing XML renderer,但我会选择上述选项之一。

【讨论】:

  • 啊啊。 libxml2 看起来是我猜想的潜在解决方案,然后我会将其写入框架中​​,以便在完成将 .xml 文件吐出给用户之前通过 libxml2 运行它?
  • 不,用户将在从您的服务器获取的 .xml 文件上运行 xmllint。如果您真的想提供格式化的 XML,您需要编写和配置一个自定义渲染器来执行此操作。另见stackoverflow.com/questions/749796/…
  • 谢谢!考虑我的天真使我感到困惑。现在说得通了。
猜你喜欢
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 2016-01-21
  • 2018-05-07
  • 2016-01-22
相关资源
最近更新 更多