2016-11-14 67 views
-1

我在我的Django應用程序中創建了一個聯繫表單。將變量從Django模板傳遞到視圖時保持HTML格式

在我的模板有一個文本字段:

<textarea class="form-control" rows="8" id="email_body" name="email_body" placeholder="Email body"></textarea> 

在我views.py這個textarea的內容將被傳遞到用於發送電子郵件的功能:

def index(request): 
    # some code here 
    email_body = request.POST.get('email_body') 
    send_emails(email_subject, email_body, email_list) # the other variables are declared above 
    # more code here 

我不知道這是必要的,但代碼send_emails功能是:

def send_emails(email_subject, email_body, email_list): 
    subject = email_subject 
    message = email_body 

    email = EmailMessage(subject, message, os.environ['EMAIL_HOST_USER'], email_list) 
    email.content_subtype = "html" 
    email.send() 

問題是電子郵件正文沒有文本格式。所有換行符(來自textarea)都會丟失,並且消息將打印在一行中。

當傳遞給視圖和send_emails函數時,是否有辦法保留textarea消息的原始HTML格式?

+0

您需要使用** safe **模板標籤。從這裏進一步閱讀。 https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#safe –

回答

2

問題是,textarea 不包含包含任何「HTML格式」。正如你所說,它包含換行符;但HTML忽略這些。您需要將它們轉換爲HTML中斷標籤。

您可以使用linebreaks模板過濾器進行此操作;在模板之外,它可以被訪問爲django.utils.html.linebreaks

+0

丹尼爾,你非常瞭解,但我認爲你在這一點上只是錯了。在DB中由文本區域保存的值包含適當的HTML格式標記,如粗體,斜體和帶有字體細節的下劃線。需要使用安全模板標記來將該變量顯示爲在textarea中輸入。我錯了嗎 ? –

+0

如果OP使用某種WYSIWYG小工具,情況就是這樣;然而在這個問題中沒有跡象表明。 –

0

如果使用Django's Form API實例化表單/ textarea,則可以應用模板標記過濾器,如{{textarea | linebreaks}}以獲取您需要的HTML格式。

相關問題