模板是消息樣式標記的位置,而不是消息.txt
文件。您應該能夠通過Django的默認值或條件語句(如果需要)來實現每個案例的變化。我看到你正在使用Bootstrap,並且對於很多用例,默認的Django消息傳遞標記很好地映射到Bootstrap自己的警報類。當您在一個視圖中的郵件...
messages.success(request, 'You have logged in successfully.')
...每個Django的消息中包含的水平('info'
,'success'
等)爲tags attribute的字符串表示。您可以將這些標記屬性用於許多上下文格式需求。所以,你可以將它傳遞給(例如鹼)的模板,如:
<div class="alert alert-{{ messages.tags }} alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{{ message }}
</div>
如果消息具有水平success
那麼這裏所呈現的CSS類將是alert-success
,所以引導會顯示綠色警報。如果狀態爲info
,則它將是alert-info
和藍色等。
Django默認的信息水平字符串表示在django/contrib/messages/constants.py
定義:
info
,success
和warning
類反映Django的消息:
DEFAULT_TAGS = {
DEBUG: 'debug',
INFO: 'info',
SUCCESS: 'success',
WARNING: 'warning',
ERROR: 'error',
}
DEFAULT_LEVELS = {
'DEBUG': DEBUG,
'INFO': INFO,
'SUCCESS': SUCCESS,
'WARNING': WARNING,
'ERROR': ERROR,
}
與引導的default alert classes和上下文格式化比較一下級別,但Django最嚴重的級別是error
而Bootstrap的是danger
。爲了使Django的error
級消息在Bootstrap的alert-danger
類中輕鬆顯示,請將DEFAULT_TAGS
條目從ERROR: 'error'
更改爲ERROR: 'danger'
。或者保持Django核心代碼不變,如'ERROR': MESSAGES_ERROR_STRING
,並在設置文件中定義該常量。 (你甚至可以創建自定義的Bootstrap類並定義你自己的Django消息級別以符合這些。)
如果你想與allauth專門定製的東西,例如從allauth的默認設置不同的消息級別 - 比如說,登錄消息info
水平,而不是success
- 您可以直接在allauth.account.views
(和allauth.socialaccount.views
改變它們)
您也可以將額外的標籤傳遞給Django消息並將其用於條件格式化:例如,請參閱extra message tags文檔和this answer。
您說:「或者保持Django核心代碼完好無損,如'錯誤':MESSAGES_ERROR_STRING並在您的設置文件中定義該常量」但這需要更改django核心代碼,不是嗎?除此之外,謝謝你的詳細解答! –
是的,儘管這意味着您仍然可以使用默認值運行在同一個Django安裝中的任何其他項目,方法是在每個項目的設置文件中定義它。此外,它使得變更更加明確可維護性而不是掩埋它。這是一種方式。 – birophilo