admin管理员组文章数量:1323707
I'm having a difficult time passing variables from the python backend to javascript. A lot of my variables look like this in javascript:
if ('{{ user.has_paid_plan}}' == 'True') {
isPayingUser = true;
} else {
isPayingUser = false;
}
It's ugly and I'm sure there's a much cleaner way to do this. How should this be done?
I'm having a difficult time passing variables from the python backend to javascript. A lot of my variables look like this in javascript:
if ('{{ user.has_paid_plan}}' == 'True') {
isPayingUser = true;
} else {
isPayingUser = false;
}
It's ugly and I'm sure there's a much cleaner way to do this. How should this be done?
Share Improve this question edited Oct 19, 2018 at 6:36 David542 asked Oct 19, 2018 at 6:13 David542David542 111k206 gold badges568 silver badges1k bronze badges 6-
on start of your js script first put all django variables in js variables. eg -
var has_paid_plan = {{ user.has_paid_plan }}
. Then use that js variable everywhere in rest of your js. This way you can also use these variables in external js files too. Other option is to use data attribute. You can have a data-has_plan in some div or anything. Then you can get its value using js/jQuery. I go with first option when I wil have only one user on a page, if I am showing a list of users, I will go with data attributes – Vaibhav Vishal Commented Oct 19, 2018 at 6:25 -
@VaibhavVishal if I just do
{{ user.has_paid_plan }}
, I get an error in javascript, because it is literally passed asTrue
(string, no quotes). – David542 Commented Oct 19, 2018 at 6:27 -
you can json serialize it in views. It will get converted to
true
, or use quotes and check for"True"
or"False"
– Vaibhav Vishal Commented Oct 19, 2018 at 6:28 - @VaibhavVishal no, I also use the django variables as well. This is a template that has both html/django templating as well as javascript. – David542 Commented Oct 19, 2018 at 6:29
-
@David542 Change it to
var foo = "{{ foo }}";
then. – Selcuk Commented Oct 19, 2018 at 6:29
4 Answers
Reset to default 2This may be an odd approach, but I suppose one way to solve this would be to pass a json object as a variable, which would contain all other variables. For example:
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)
In this way you have access to all the django/python variables, and you also have all the variables properly json-encoded as the "json_ctx"
object which you can use in your javascript.
Let's keep things simple. You don't have to use any other response type like JSON or anything else. The first thing that you do is pass the value from the backend. Assuming User model has a field as "has_paid_plan" as a BooleanField. If not please convert the same to a BooleanField.
views.py
context = dict()
context['user'] = user_instance
return render(request, 'template.html', context)
template.html
Add this to your script.
<script>
.... // other code
{% if user.has_paid_plan %}
isPayingUser = true;
{% else %}
isPayingUser = false;
{% endif %}
</script>
Try to keep things simple. It's a good practice. Hope this helps.
<input type='hidden' value='{{ user.has_paid_plan}}' id='has_paid_plan' />
if ($('#has_paid_plan').val() == 'True') {
isPayingUser = true;
} else {
isPayingUser = false;
}
another solution:
<script>
const isAuthenticated = ${str(user.is_authenticated).lower()}
</script>
本文标签: pythonPassing django variables to javascriptStack Overflow
版权声明:本文标题:python - Passing django variables to javascript - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742130881a2422152.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论