$.load()
を使用する Django テンプレートを作成しようとしています{% if user.is_authenticated %}
。残念ながら、AJAX によって生成された HTTP リクエストへの応答である場合にのみuser
、オブジェクトがサーバー上でレンダリングされるときにテンプレートで定義されていません。
my_template.html:
{% if user.is_authenticated %}
<div>This should be printed</div>
{% else %}
<div>But this is because there is no user object</div>
{% endif %}
my_loader.html:
{% if user.is_authenticated %}
<div>This works fine because I'm logged in</div>
{% endif %}
<div id="template'></div>
<script>
$('#template').load('/my_template.html');
</script>
views.py (django-annoying の@render_to
デコレータを使用):
@render_to('my_template.html')
def my_template(request):
return {}
問題は、私が理解しているように、 my_loader.html のレンダリングで利用可能な「コンテキスト」が、 を介してサーバーで利用できないことです.load()
。この「コンテキスト」がセッションなのか、Cookie なのか、ヘッダー内の何かなのかはわかりませんが、結果として、サーバーが AJAX によって生成された HTTP リクエストから my_template.html をレンダリングすると、user
オブジェクトがありません。ブラウザに有機的にロードすると、正常に動作します。
それが役立つ場合:
- これは同じドメインにあります。
- 代わりに .ajax() を使用してみました
xhrFields: { withCredentials: true }
- .ajax() の代わりに .ajax() を使用してみました
headers: { 'sessionid': $.cookie('sessionid') }
。sessionid Cookie は存在しませんでした (ただし、csrftoken は存在していたので、正しい場所を探していたことがわかります)。
user
AJAX 経由で my_template.html のようなページをロードするときに、my_loader.htmlのオブジェクトをサーバーで使用できるようにする方法はありますか?