2017-09-27 106 views
0

我有這樣一段代碼在我看來:Django的消息重定向

if _user.objects.user_exists(_email): 
    auth.logout(request) 
    messages.success(request, 'You already hold a verified account with us. Please login.') 
    return redirect('accounts:login') 

,這在我的模板:

{% if messages %} 
    {% for message in messages %} 
     <div>{{ message }}</div> 
    {% endfor %} 
{% endif %} 

這可悲的是行不通的。但如果我將return redirect('accounts:login')更改爲return render(request, 'accounts/login.html'),則會顯示該消息。那麼它是什麼阻止了重定向期間的消息?

和消息存儲,我使用:

MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage' 

感謝您的幫助。

+0

懷疑在註銷時會話被刪除。如果您使用不同的消息存儲後端,它會工作嗎? –

+0

@DanielRoseman我試着刪除註銷電話。它仍然是一樣的。 – Nirmal

回答

2

我在撞牆後兩天發現了這個問題。這是我的網站的會話設置。

# Session settings 
SESSION_COOKIE_DOMAIN = '.mydomain.com' 
SESSION_COOKIE_SECURE = True 

因此,這是在本地(127.0.0.1)開發顯然不是拿起我的會議,由於當地的環境並沒有固定,該cookie沒有被設置爲好。

爲了解決這個問題,必須採取以下步驟:

  1. 在開發機127.0.0.1 local.mydomain.com添加主機條目
  2. 然後修改runserver命令runserver local.mydomain.com:8000
  3. 最後,修改安全cookie設置爲SESSION_COOKIE_SECURE = not DEBUG

從那時起我必須訪問本地版本http://local.mydomain.com:8000

希望這可以幫助任何人通過相同的問題。

+0

爲什麼render()和redirect()的行爲會有所不同? – sureshvv

+0

@sureshvv由於'render()'在設置消息的相同視圖中被調用,變量被視爲已填充。而不是由'redirect()'調用的頁面必須依賴存儲來獲取消息值。 – Nirmal

+0

但是,如果在會話中正確設置,兩者都應該同樣好,不是嗎? – sureshvv