如何向 Django 消息添加额外的数据?
How can I add additional data to Django messages?
我正在尝试将 this 片段集成到我们的 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 %}
但我想指定 header <h1>
和列表 sub-messages <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 消息?或者你会建议另一种方法吗?我可以将这些变量传递到上下文中,但我想尽可能使用消息。
您可以使用 extra_tags
消息属性获得一定的自由度。
见https://docs.djangoproject.com/en/1.11/ref/contrib/messages/#adding-extra-message-tags
因此您可以针对不同的号召性用语使用不同的 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 %}
我正在尝试将 this 片段集成到我们的 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 %}
但我想指定 header <h1>
和列表 sub-messages <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 消息?或者你会建议另一种方法吗?我可以将这些变量传递到上下文中,但我想尽可能使用消息。
您可以使用 extra_tags
消息属性获得一定的自由度。
见https://docs.djangoproject.com/en/1.11/ref/contrib/messages/#adding-extra-message-tags
因此您可以针对不同的号召性用语使用不同的 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 %}