Как я могу добавить дополнительные данные в сообщения Django?
Я пытаюсь интегрировать этот фрагмент в наш проект Django:
Это просто обычай HTML
а также CSS
для сообщений.
html
выглядит так:
<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>
Так что, если я хочу интегрировать его с платформой сообщений, я могу сделать:
{% 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 %}
Но я хотел бы указать заголовок <h1>
и список вложенных сообщений <p>
поэтому мне нужно добавить в сообщение что-то вроде словаря, который может содержать дополнительные атрибуты, такие как {'title':'This is a title','submessages':[1,2,3]}
так что я могу сделать:
{% 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 %}
Возможно ли использовать сообщения Django? Или вы бы предложили другой подход? Я могу передать такие переменные в контекст, но я хотел бы использовать сообщения, если это возможно.
1 ответ
Вы можете получить определенное количество свободы, используя extra_tags
атрибут сообщений.
См. https://docs.djangoproject.com/en/1.11/ref/contrib/messages/.
Таким образом, вы могли бы иметь разные extra_tags
для разных призывов к действию, например
# views.py
messages.success(request, 'You have signed up', extra_tags='suggest_upgrade')
или же:
messages.success(request, 'You have signed up', extra_tags='suggest_share')
а потом:
{% 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 %}
Вы можете даже передать подмассаж в качестве самого тега, хотя он, вероятно, не предназначен для этой цели:
messages.success(request, 'Main message here', extra_tags='submessage here')
а потом:
{% for message in messages %}
<h1>{{ message }}</h1>
<p>{{ message.extra_tags }}</p>
{% endfor %}
Сообщение не обязательно должно быть строкой. В вашем случае, использование словаря будет работать нормально:
messages.success(request, {'title':'This is a title','submessages':[1,2,3]})
а затем в вашем шаблоне:
{% 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 %}