Django模板允許您包含其他模板來組成頁面。當你想渲染整個頁面,但是可能希望使用AJAX重新加載它的一部分,並且不想將所有渲染邏輯轉移到javascript(或更糟糕的情況:在javascript中複製它)時,這是特別有用的。如何在django模板中使用csrf_token
包括模板可以是這樣的:
{% include "template.html" %}
但是,如果該模板可能是由不同的視圖中使用,很可能是你的背景不只是一個該模板上下文的超集。所以Django可以讓你指定模板的上下文。
因爲我想避免在模板被包含在另一個模板中呈現時以及當模板呈現爲視圖的主模板時意外引入了不同的行爲,所以我也有意義使用only
選項以避免它訪問父模板的上下文。
所以我有這個樣子的:
{% include "sub_template.html" foo=sub_context.foo bar=sub_context.bar only %}
然而,並稱only
導致一個問題:{% csrf_token %}
不再在模板中的作品,因爲我想一些隱藏的魔力,Django的確實已被排除。
該Django的記錄錯誤是
UserWarning:A {%csrf_token%}在模板中被使用,但上下文沒有提供該值。這通常是由於沒有使用RequestContext引起的。
父模板是具有RequestContext
渲染,並且當所述子模板呈現爲所述主模板,不包括在內,不會發生錯誤。
對此問題最明顯的解決方法是不使用only
選項include
,這似乎是一個恥辱。有沒有更好的解決這個問題的方法?