2010-10-18 60 views
3

我有一個名爲「電子郵件選定成員」的Django管理員操作。檢查一些成員,然後單擊Go按鈕並打開用戶的郵件程序。所選成員的電子郵件已被預先輸入。Django:如何重定向到mailto

這與URI是「電子郵件地址的工作原理是一個Django HttpResponseRedirect(URI):EMAIL1,EMAIL2 .. 在地址EMAIL1,EMAIL2 ...進行查找在服務器上

唯一的問題是該瀏覽器重新定向到一個空白頁,以及一個開放的客戶端郵件程序

有什麼辦法避免這種

- 彼得·

回答

1

不要使用HttpResponseRedirect剛。使mailto:連線。 <a href="mailto:email1...">Email selected members</a>

+1

我想這不是彼得的意圖,有人點擊鏈接! – 2010-10-18 18:19:41

+0

好吧,我應該知道。最近,一次性用戶發佈答案,然後甚至沒有對其發表評論或做任何事情似乎最近的憤怒。 – 2010-10-19 00:29:24

+0

是的,它可能是controlfreak,這是一個恥辱。但是一個人必須睡覺。正如lazerscience所說,我不想將客戶端代碼寫入定製的Django管理員表單。 – peter2108 2010-10-19 10:11:02

0

我不認爲這是可能的。 RFC 2616表示重新302重定向:

臨時URI應該由 位置字段在響應中給出。 除非請求方法是HEAD, 響應應該 包含有 超鏈接到新的URI(S)

短的超文本筆記的實體,以便在空白頁,我看到的是(非常)短的超文本筆記。瀏覽器獲取重定向指令,彈出包含重定向消息的臨時頁面,然後檢索重定向的URL。但是使用mailto:URL,臨時頁面顯然仍然存在。

1

這個問題有點老,但我只是經歷了這一點,我想我可以幫助任何人在未來尋找答案。

我跑這個問題,因爲我是建設網站已經內置在跟蹤的自承載廣告的出站鏈接的URL跟蹤系統。如果我沒有重定向,沒有辦法(不改變它被實現的方式)來跟蹤點擊,因爲我沒有使用API​​或任何東西。

簡單的解決方法是做你所做的,發送一個HttpResponse(),其內容是元標記<meta http-equiv="refresh" content="0; url=mailto:[email protected]" />。這會導致頁面在加載時刷新,這會觸發mailto:操作。

現在,我們留下了一個開放的窗口,並使用JavaScript的window.close()方法,我們不能關閉窗口。但我相信this solution應該可以工作。刷新成功後調用Javascript函數。

不幸的是我沒有測試過這一點,但是這兩種方法要做到一個mailto:重定向不留下一個空白窗口/標籤後面。

希望這會有所幫助!