I'm trying to integrate this snippet into our Django project:
It's just custom HTML
and CSS
for messages.
The html
looks like this:
<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>
So if I want to integrate it with messages framework, I can do:
{% 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 %}
But I would like to specify header <h1>
and list of sub-messages <p>
so I need to add to message something like dictionary which can hold additional attributes like {'title':'This is a title','submessages':[1,2,3]}
so I can do:
{% 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 %}
Is it possible using Django messages? Or would you suggest another approach? I can pass such variables into the context but I would like to use messages if possible.
You can get certain amount of freedom using the extra_tags
messages attribute.
See https://docs.djangoproject.com/en/1.11/ref/contrib/messages/#adding-extra-message-tags
So you could have different extra_tags
for different calls to action, e.g.
# views.py
messages.success(request, 'You have signed up', extra_tags='suggest_upgrade')
or:
messages.success(request, 'You have signed up', extra_tags='suggest_share')
and then:
{% 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 %}
You could even pass a submessage as the tag itself although it’s probably not designed for that purpose:
messages.success(request, 'Main message here', extra_tags='submessage here')
and then:
{% for message in messages %}
<h1>{{ message }}</h1>
<p>{{ message.extra_tags }}</p>
{% endfor %}
Message doesn't necessary needs to be a string. In your case, using a dictionary would work just fine:
messages.success(request, {'title':'This is a title','submessages':[1,2,3]})
and then in your template:
{% 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 %}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With