我在将变量从Python后端传递到JavaScript时遇到了困难。我的很多变量在JavaScript中看起来像这样:
if ('{{ user.has_paid_plan}}' == 'True') {
isPayingUser = true;
} else {
isPayingUser = false;
}
这看起来很难看,我相信有更简洁的方法来实现。应该如何处理?
我在将变量从Python后端传递到JavaScript时遇到了困难。我的很多变量在JavaScript中看起来像这样:
if ('{{ user.has_paid_plan}}' == 'True') {
isPayingUser = true;
} else {
isPayingUser = false;
}
这看起来很难看,我相信有更简洁的方法来实现。应该如何处理?
这可能是一个奇怪的方法,但我认为解决这个问题的一种方式是将一个包含所有其他变量的json对象作为变量传递。例如:
def user(request):
user = request.user
ctx = {
'isPayingUser': user.is_paying_user()
'age': user.age
'username': user.email
}
json_ctx = json.dumps(ctx)
ctx['json_ctx'] = json_ctx
return render(request, 'template.html', ctx)
这样,您就可以访问所有的django/python变量,并且您也可以将所有变量正确地json编码为"json_ctx"
对象,您可以在javascript中使用它。
让我们简单些。您不必使用其他响应类型,如JSON或其他任何类型。您需要做的第一件事是从后端传递值。假设用户模型具有名为“has_paid_plan”的字段,该字段是布尔字段。如果没有,请将其转换为布尔字段。
views.py
context = dict()
context['user'] = user_instance
return render(request, 'template.html', context)
template.html
将此内容添加到您的脚本中。
<script>
.... // other code
{% if user.has_paid_plan %}
isPayingUser = true;
{% else %}
isPayingUser = false;
{% endif %}
</script>
尽量保持简单,这是一个好的实践。希望这可以帮助到您。
<input type='hidden' value='{{ user.has_paid_plan}}' id='has_paid_plan' />
if ($('#has_paid_plan').val() == 'True') {
isPayingUser = true;
} else {
isPayingUser = false;
}
另一种解决方案:
<script>
const isAuthenticated = ${str(user.is_authenticated).lower()}
</script>
var has_paid_plan = {{ user.has_paid_plan }}
。然后在js的其余部分中随处使用这个js变量。这样你也可以在外部js文件中使用这些变量。另一个选项是使用数据属性。你可以在某个div或其他元素中设置一个data-has_plan属性。然后你可以使用js/jQuery获取它的值。当页面上只有一个用户时,我会选择第一种选项;如果我要显示用户列表,我会选择使用数据属性。 - undefined{{ user.has_paid_plan }}
,在 JavaScript 中会出现错误,因为它被直接传递为True
(字符串,没有引号)。 - undefinedtrue
,或者使用引号并检查"True"
或"False"
。 - undefinedvar foo = "{{ foo }}";
。 - undefined