使用我的Django模板的正确Javascript范围是什么?

时间:2012-10-28 21:36:32

标签: javascript django forms

我在Django中有一个带有foor循环的模板,看起来大致如下:

{% if items %}

<form method="post" name="managerform" id="managerform" action="">{% csrf_token %}
{{ managerform }}
</form> 

{% for item in items %}

<script type='text/javascript'>
var yes = function yes() { manager(function(response) {
if(response && response.status == 'user') {        
var object = '{{ item }}'
document.managerform.item.value = object;
document.managerform.preferences.value = "Yes";
document.managerform.submit();
} 
else{ 
authUser(); } });}
</script>
...
<button onclick=yes()>Yes</button>
...
{% endfor %}

提交表单的问题是,它总是从item提交最后items。我已经尝试让yes接受一个论证aitem,这没有任何帮助,因为使用<button onclick=yes("{{item}}")>完全失败并且正在做:

<script>
aitem="{{ item }}"
</script>
<button onclick=yes(aitem)>

再次使用item中的最后items

对任何人都有明显的解决方案吗?

1 个答案:

答案 0 :(得分:2)

将按钮的HTML更改为:

<button onclick='yes("{{item}}");'>Text</button>

并在你的django条件和循环之外完全删除<script>代码,以便它始终可用,但将其更改为:

var yes = function (item) {
    manager(function (response) {
        if (response && response.status == 'user') {
            var object = item;
            document.managerform.item.value = object;  // You could combine this and the previous line
            document.managerform.preferences.value = "Yes";
            document.managerform.submit();
        } else {
            authUser();
        }
    });
}

这样,你的django for循环内部唯一的东西就是按钮,每一个都有yes函数的不同参数。 yes函数现在接受一个参数并按您的意愿使用它。你可能不得不修改它以满足你的需求,因为你的代码片段似乎是一个例子而不是你所拥有的。