2011-05-18 4 views
6

El escenario es el siguiente.Renderice un xml a una vista

Obtengo un archivo atom de un sitio web (digamos A). A un tercero se le solicitará este archivo atom a través de mi sitio web (digamos B).

Estoy escribiendo una aplicación Django que con frecuencia sondeará el sitio web A y lo almacenará como un archivo. Ahora, cuando un tercero solicite el archivo a través del sitio web B, tendré que mostrar el archivo como xml en el navegador.

Mi pregunta es ¿cómo renderizo un archivo xml completo a una vista en Django?

render_to_response 

espera una plantilla. No puedo usar una plantilla como tal. Solo necesito mostrar el archivo en la vista. ¿Cómo hago esto?

Respuesta

2

Si no desea representar una plantilla, no lo haga. render es solo un atajo para representar una plantilla. Si solo desea mostrar texto, simplemente páselo a HttpResponse.

Dado que los datos están en un archivo, esto va a funcionar:

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

aunque se debe tener cuidado con problemas de concurrencia, si más de una persona está accediendo a su sitio a la vez.

+0

Gracias por la aclaración. Entonces, ¿cuál es la mejor manera de lidiar con este tipo de situación? – vkris

+0

No funcionó para mí. Mostró un error de "objeto de módulo no invocable". La respuesta de silent1mezzo parece funcionar bien. –

12

Haga algo como esto.

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

miaplicacion/index.html es un derecho plantilla? No tengo variables como foo-> bar. Solo tengo un archivo xml. Necesito usar algo como say return render (request, "myxmlfile.xml"). Este archivo xml no es una plantilla, sino un archivo xml válido. – vkris

6

Sólo tiene que definir el tipo MIME para 'text/xml' utilizando el content_type argumento:

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