如何将模板变量传递给javascript

时间:2016-05-28 16:25:12

标签: javascript django highcharts

朋友们,我正在尝试将模板变量传递给javascript以创建图表。但我没有得到它。 Django将所有js文件视为静态文件。因此动态模板变量不适用于javascripts。

我甚至试过这个:

passing template variables to javascript

但它也没有帮助。只能传递一个变量。其他人没有。

def profile(request,username):
    try:
        u = User.objects.get(username=username)
        questions = Question.objects.filter(user=u)
        answers = Answer.objects.filter(user=u)
        docs = Document.objects.filter(user=u)
    except User.DoesNotExist:
        pass
    return render(request,"auths/profile.html",locals())

另外,如上面的链接所述,我的profile.html是

<input type="hidden" value="{{ u.username }}" id="username" />
<input type="hidden" value="{{ docs.count }}" id="docs" />
<input type="hidden" value="{{ questions.count }}" id="questions" />
<input type="hidden" value="{{ answers.count }}" id="answers" />


{% block extra %}
    <script type="text/javascript">
        var user = document.getElementById("username").value;
        var docs = document.getElementById("docs").value;
        var questions = document.getElementById("questions").value;
        var answers = document.getElementById("answers").value;
    </script>

   <script type="text/javascript" src="{% static 'highcharts.js'%}">      </script>
   <script type="text/javascript" src="{% static 'highcharts-3d.js'%}"></script>

   <script type="text/javascript" src="{% static 'chart.js' %}"></script>


{% endblock %}

我传递数据的chart.js的一部分是:

series: [{
  type: 'column',
  name: 'User Profile',
  data: [
      ['Questions',   questions],
      ['Answers',   answers],
      ['Documents',  docs]
  ]
}]

如前所述,问题是只有一个变量通过而其他变量没有通过。因此,不会呈现任何图表。我该怎么做朋友?

如果有帮助,我使用的是Django 1.9和highcharts。

1 个答案:

答案 0 :(得分:2)

要回答我自己的问题,我想我弄清楚出了什么问题。图表值采用数字格式。但我把它作为字符串传递给我。所以需要做的就是使用javascript类型转换将这些字符串转换为值或数字。

我传递数据的chart.js的一部分是:

series: [{
  type: 'column',
  name: 'User Profile',
  data: [
      ['Questions',   Number(questions)],
      ['Answers',   Number(answers)],
      ['Documents',  Number(docs)]
      ]
}]

将字符串更改为数字,图表已呈现!