我正在尝试$.load()
使用{% 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 还是 header 中的什么,但结果是当服务器从通过 AJAX 生成的 HTTP 请求中呈现 my_template.html 时,没有user
对象。当我在浏览器中有机地加载它时,它工作正常。
如果有帮助:
- 这是在同一个域上。
- 我已经尝试过使用 .ajax() 代替
xhrFields: { withCredentials: true }
- 我已经尝试过使用 .ajax() 而不是
headers: { 'sessionid': $.cookie('sessionid') }
. sessionid cookie 不存在(尽管 csrftoken 存在,所以我知道我找对了地方)。
知道如何在user
通过 AJAX 加载 my_template.html 之类的页面时使来自 my_loader.html 的对象对服务器可用吗?