2011-04-10 16 views
12

Estoy usando mensajes django y quiero poner un hipervínculo en él.Ponga un hipervínculo <a> en un mensaje django

view.py:

from django.contrib import messages 

def my_view(request): 
    messages.info(request,"My message with an <a href='/url'>hyperlink</a>") 

Obviamente, en mi página, veo el código html y ningún hipervínculo. ¿Cómo tratar el mensaje como un código htlml?

Espero que esto esté claro.

+1

Si bien las respuestas aquí pueden trabajar, sugiero fuertemente la respuesta dada a una pregunta muy similar aquí: http://stackoverflow.com/a/10124845/26196 - que ofrece más flexibilidad potencial sin algunas de las advertencias de otros métodos. –

Respuesta

10

Las cadenas en las plantillas de Django se escapan automáticamente. Usted no quiere que su HTML puro para ser auto-escapado, por lo que debería o bien pasar la cadena a la safe filtro:

{{ message|safe }} 

o desactivar autoescape con el autoescape etiqueta:

{% autoescape off %} 
    {{ message }} 
{% endautoescape %} 
38

Si no desee desactivar autoescaping en todos los mensajes/plantillas, puede utilizar mark_safe para ese mensaje en particular:

from django.utils.safestring import mark_safe 

messages.info(request, mark_safe("My message with an <a href='/url'>hyperlink</a>")) 

Y si usted tiene quizá algunos pa insegura rts de su mensaje, puede usar cgi.escape para escapar de esas partes.

from cgi import escape 
messages.info(request, mark_safe("%s <a href='/url'>hyperlink</a>" % escape(unsafe_value))) 
+0

Debe utilizar SessionStorage para el marco de mensajes para que esto funcione; consulte http://stackoverflow.com/questions/2053258/how-do-i-output-html-in-a-message-in-the -new-django-messages-framework –

Cuestiones relacionadas