2009-09-14 24 views
23

Estoy usando la biblioteca lxml para definir una variable (categoría) en una vista. lxml proporciona un método .get para recuperar atributos personalizados. Me gustaría utilizar en la plantilla de este modo:¿Cómo pasar un argumento a un método en una variable de plantilla en Django?

{{ category.get("foo") }} 

Sé que cuando se utilizan variables de plantilla que no es necesario utilizar paréntesis, pero me sale el siguiente error:

{{ category.get "foo" }} 

Could not parse the remainder: ' "foo"' from 'category.get "foo"'

Supongo que hay algo mal con mi sintaxis, pero Google no me ha ayudado. Los documentos django dicen que los métodos se buscan utilizando un .

+0

La sintaxis utilizada en los filtros de plantilla de Django es ":" para los argumentos, por lo que creo que si alguien implementara esto, sería {{category.get: foo}}. Pero, no existe. Tal vez deberías agregarlo? – slacy

+0

Posible duplicado de [¿Cómo llamar a la función que toma un argumento en una plantilla de Django?] (Http://stackoverflow.com/questions/2468804/how-to-call-function-that-takes-an-argument-in- a-django-template) –

Respuesta

32

No se puede pasar un argumento a un atributo invocable como este. O bien, extraiga el valor en la vista o escriba una etiqueta de plantilla personalizada para hacerlo.

+0

¿Hay alguna forma de tener acceso a otras variables, como la solicitud actual (es decir, request.user) o el objeto de contexto actual? – slacy

+1

puede en una plantilla de etiqueta personalizada –

+0

Ya debe tener acceso a request.user – OllyTheNinja

15

Estoy de acuerdo con la filosofía de la separación de la lógica de diseño, pero hay una excepción. Actualmente estoy escribiendo un método get_image (height = xxx, width = xxx) para un modelo. Claramente, debe depender del diseñador de la plantilla decidir el tamaño de la imagen como la última etapa. Aunque supongo que lo correcto es escribir una etiqueta personalizada, pero ¿por qué restringir?

+1

Totalmente cierto. No es una "respuesta", más como un comentario, pero +1 –

Cuestiones relacionadas