2010-01-31 23 views
3

我和Django的CSRF中間件... 當我使用的模板標籤csrf_token我得到這個輸出的一個問題:CSRF中間件 - 變化csrf_token輸出(從的XHTML HTML)

<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='6bda3605af31dd8595d2a67d0dda827b' /></div> 

但我想這個輸出(HTML不是XHTML:

<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='6bda3605af31dd8595d2a67d0dda827b'></div> 

我tryed看到django.middleware.csrf.CsrfViewMiddleware的代碼,但沒有成功:(

所以,我怎樣才能改變FO CSRF輸出_token標籤?

坦克

+0

請注意,CSRFMiddleware已棄用,並將在Django 1.4中刪除。有關詳細信息,請參閱http://docs.djangoproject.com/zh/dev/releases/1.2-alpha-1/#csrf-protection。 – stefanw 2010-01-31 18:57:51

回答

1

你必須去和編輯django.template.defaulttags.py:在第48行有標籤的輸出,並且如你所願,你可以改變它。

請注意,這是一項開發功能,因此,如有更改,更新Django可能會取消您的更改!
此外,請花時間去關於這個特定問題去look for a ticket:我提出的解決方案可能會解決您的問題,但我認爲「官方」修復會更好。

+0

耶!!!我沒有找到這個:'( 但是我會創建一個my_csrf_token,所以當我更新django時,將很容易解決任何問題:) – patrick 2010-01-31 16:17:58

3

這是我對該問題的修復。

{% with csrf_token as csrf_token_clean %}{{ csrf_token_clean }}{% endwith %} 

在模板中,這將返回唯一的令牌密鑰,所以你可以寫你自己的有效的HTML input標籤,像這樣。

<input type="hidden" name="csrfmiddlewaretoken" value="{% with csrf_token as csrf_token_clean %}{{ csrf_token_clean }}{% endwith %}" > 

來源:http://www.phptodjango.com/2010/07/django-csrftoken-template-tag-fix.html

3

解決辦法其實很簡單:

<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"> 

有一個在{% with %}結構是沒有意義的。