Estoy tratando de integrar este fragmento en nuestro proyecto Django:
Es solo HTML y CSS personalizado para mensajes.
El html se ve así:
<div class="bs-calltoaction bs-calltoaction-success"> <div class="row"> <div class="col-md-9 cta-contents"> <h1 class="cta-title">Its a Call To Action</h1> <div class="cta-desc"> <p>Describe the action here.</p> <p>Describe the action here.</p> <p>Describe the action here.</p> </div> </div> <div class="col-md-3 cta-button"> <a href="#" class="btn btn-lg btn-block btn-default">Go for It!</a> </div> </div> </div>Entonces, si quiero integrarlo con el marco de mensajes, puedo hacer:
{% for message in messages %} <div class="bs-calltoaction bs-calltoaction-{{ message.tags }}"> <div class="row"> <div class="col-md-9 cta-contents"> {{ message }} </div> <div class="col-md-3 cta-button"> <a href="#" class="btn btn-lg btn-block btn-default">Go for It!</a> </div> </div> </div> {% endfor %} Pero me gustaría especificar el encabezado <h1> y la lista de submensajes <p> , así que necesito agregar al mensaje algo como un diccionario que pueda contener atributos adicionales como {'title':'This is a title','submessages':[1,2,3]} entonces puedo hacer:
{% for message in messages %} <div class="bs-calltoaction bs-calltoaction-{{ message.tags }}"> <div class="row"> <div class="col-md-9 cta-contents"> <h1 class="cta-title">{{ message.title }}</h1> <div class="cta-desc"> <p>{{ message.submessages.0 }}</p> <p>{{ message.submessages.1 }}</p> </div> </div> <div class="col-md-3 cta-button"> <a href="#" class="btn btn-lg btn-block btn-default">Go for It!</a> </div> </div> </div> {% endfor %}¿Es posible usar mensajes de Django? ¿O sugeriría otro enfoque? Puedo pasar tales variables al contexto, pero me gustaría usar mensajes si es posible.
Puede obtener cierta cantidad de libertad utilizando el atributo de mensajes extra_tags .
Consulte https://docs.djangoproject.com/en/1.11/ref/contrib/messages/#adding-extra-message-tags
Por lo tanto, podría tener diferentes extra_tags para diferentes llamadas a la acción, por ejemplo
# views.py messages.success(request, 'You have signed up', extra_tags='suggest_upgrade')o:
messages.success(request, 'You have signed up', extra_tags='suggest_share')y entonces:
{% for message in messages %} {% if 'suggest_upgrade' in message.extra_tags %} <h1>Get these extra features</h1> <p>info here</p> {% elif 'suggest_share' in message.extra_tags %} <h1>Share with friends</h1> <p>other info here</p> {% endif %} {% endfor %}Incluso podría pasar un submensaje como la etiqueta en sí, aunque probablemente no esté diseñado para ese propósito:
messages.success(request, 'Main message here', extra_tags='submessage here')y entonces:
{% for message in messages %} <h1>{{ message }}</h1> <p>{{ message.extra_tags }}</p> {% endfor %}El mensaje no necesita necesariamente ser una cadena. En su caso, usar un diccionario funcionaría bien:
messages.success(request, {'title':'This is a title','submessages':[1,2,3]})y luego en tu plantilla:
{% for message in messages %} <div class="bs-calltoaction bs-calltoaction-{{ message.tags }}"> <div class="row"> <div class="col-md-9 cta-contents"> <h1 class="cta-title">{{ message.message.title }}</h1> <div class="cta-desc"> <p>{{ message.message.submessages.0 }}</p> <p>{{ message.message.submessages.1 }}</p> </div> </div> <div class="col-md-3 cta-button"> <a href="#" class="btn btn-lg btn-block btn-default">Go for It!</a> </div> </div> </div> {% endfor %}