2017-05-29 102 views
2

Allauth的消息被默認保存爲文本文件模板目錄中,並且這些看起來像:Django的allauth自定義消息:與HTML/CSS樣式消息

{% load i18n %} 
{% blocktrans %}You cannot remove your primary e-mail address ({{email}}).{% endblocktrans %} 

這些用Django的模板標籤,但不'HTML友好'。 我想這些風格和有類似:

{% load i18n %} 
<div class="alert alert-danger alert-dismissible" role="alert"> 
      <button type="button" class="close" data-dismiss="alert" aria-label="Close"> 
       <span aria-hidden="true">&times;</span> 
      </button> 
      {% blocktrans %}You cannot remove your primary e-mail address ({{email}}).{% endblocktrans %} 
</div> 

但上面的代碼只是呈現的HTML文本。我無法將此HTML放在模板中,只需在模板中執行{{message}},因爲我想根據每條消息偏差(至少是顏色!)更改其中的一部分。

我怎麼能做到這一點? 謝謝!

回答

1

模板是消息樣式標記的位置,而不是消息.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">&times;</span> 
    </button> 
    {{ message }} 
</div> 

如果消息具有水平success那麼這裏所呈現的CSS類將是alert-success,所以引導會顯示綠色警報。如果狀態爲info,則它將是alert-info和藍色等。

Django默認的信息水平字符串表示在django/contrib/messages/constants.py定義:

Bootstrap default alert classes and contextual colours

infosuccesswarning類反映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

+1

您說:「或者保持Django核心代碼完好無損,如'錯誤':MESSAGES_ERROR_STRING並在您的設置文件中定義該常量」但這需要更改django核心代碼,不是嗎?除此之外,謝謝你的詳細解答! –

+0

是的,儘管這意味着您仍然可以使用默認值運行在同一個Django安裝中的任何其他項目,方法是在每個項目的設置文件中定義它。此外,它使得變更更加明確可維護性而不是掩埋它。這是一種方式。 – birophilo