[英]How can I subclass Django TextChoices to add additional attributes?
[英]How can I add additional data to Django messages?
我正在嘗試將此代碼段集成到我們的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消息? 還是您會建議另一種方法? 我可以將此類變量傳遞到上下文中,但如果可能的話,我想使用消息。
您可以使用extra_tags
messages屬性獲得一定程度的自由度。
參見https://docs.djangoproject.com/zh-CN/1.11/ref/contrib/messages/#adding-extra-message-tags
因此,您可以針對不同的號召性extra_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 %}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.