那麼你可以嘗試從請求得到referrer header但據我所知,它是依賴於瀏覽器和is not very reliable所以你正在做的方式可能是最好的。您可以通過創建模板標籤來避免重新手動重寫網址,從而讓生活變得更輕鬆。
你可以輕易地得到Django的request
對象的當前URL的網頁上,所以不是手動設置它的鏈接,你可以寫HTML的一個片段:
link_to_login.html
<!-- You should probably get /login/ using the {% url ... %} template tag -->
<a href="/login/?login_cancel_url={{ request.path|urlencode }}">
Login Page</a>
並使用{% include "link_to_login.html"%}
模板標籤。
另外,如果文本必須根據不同的鏈接,你可以代替創建inclusion template tag:
templatetags/extra_auth_tags.py
@register.inclusion_tag('templates/extra_auth_tags/login_link.html')
def login_link(context, text=None):
return {
'text':text
}
模板/ extra_auth_tags/LOGIN_LINK .html
<!-- You should probably get /login/ using the {% url ... %} template tag -->
<a href="/login/?login_cancel_url={{ request.path|urlencode }}">
{% if text %}
{{ text }}
{% else %}
Some Default Text
{% endif %}
</a>
,然後在您的模板中將其稱爲{% login_link text="Check you messages" %}
。請注意,包含標籤的關鍵字參數僅在django dev版本中受支持,因此您可能需要手動編寫模板標籤。
謝謝pastylegs。我想我會使用request.META.HTTP_REFERER(如果它存在並且如果不在主頁上,或者根本不顯示取消按鈕)。自發布以來,我檢查了一些熱門網站,並注意到大多數網站不會在攔截登錄頁面上顯示取消按鈕 - 大概是因爲它不是微不足道的! – 2012-02-20 14:30:33