Django - 在javascript函数

时间:2015-05-20 04:26:24

标签: javascript html django

我按照Django网站上的教程,尝试在Django网站的教程results.html创建级联下拉列表。

我在javascript函数中使用Django标记{{ }}{% %}时遇到语法错误。我使用的IDE是Komodo Edit,它将此行{% for item in question.choice_set.all %}突出显示为红色,并指出错误:Javascript:SyntaxError:expected expression,got'%'。

我想问一下如何解决这个问题?

非常感谢!以下是我的html脚本。

results.html

<!doctype html>
<html>
<body>
<script type="text/javascript">
        function change(chosen,updateList){
            document.getElementById('text').value = chosen;
            updateList.options.length=0;
            {% for item in question.choice_set.all %}
                if (item = chosen) {
                    updateList.options[updateList.options.length] = new Option({{item.votes}}, '')
                }
            {% endfor %}
        }
</script>
<form name='form' action="{% url 'polls:results' quezstion.id %}", method='post'>
    {% csrf_token %}
    <h1>{{ question.question_text }}</h1>
    <select name="Choice" onchange="change(document.form.Choice.options[document.form.Choice.selectedIndex].value, document.form.Votes)">
        {% for item in question.choice_set.all %}   //question used here is defined in views
        <option value="{{item.id}}">{{ item.choice_text }}</option>
        {% endfor %}
    </select>
    <select name="Votes">
        <option></option>
    </select>
</form>

1 个答案:

答案 0 :(得分:0)

如果您想在嵌入式js中使用视图中的数据,则必须在视图中序列化此数据手动(例如我在项目中如何实现它):

来自CBV的

get_context_data :( django 1.6 python 2.7)

 import json
 from django.utils.safestring import mark_safe
 # ...

 def get_context_data(self, **kwargs):
    context = super(LargeMapView, self).get_context_data(**kwargs)
    human_values = Human.objects.values(
        'pk', 'fio',
        'lat_deg', 'lat_min', 'lat_sec',
        'lon_deg', 'lon_min', 'lon_sec',
    )

    context['human_data'] = mark_safe(json.dumps(list(human_values), ensure_ascii=False))

    return context

模板的一部分:

 <script>window.jQuery || document.write('<script src="{% static 'js/jquery-1.11.1.min.js' %}"><\/script>')</script>

 <script type="text/javascript">
    var humanList = {{ human_data }};

    $.each(humanList, function (index, human) {
            var coords = getCoords(
                human['lat_deg'], human['lat_min'], human['lat_sec'],
                human['lon_deg'], human['lon_min'], human['lon_sec']
            );
    });
 </script>