我在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
。
对任何人都有明显的解决方案吗?
答案 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
函数现在接受一个参数并按您的意愿使用它。你可能不得不修改它以满足你的需求,因为你的代码片段似乎是一个例子而不是你所拥有的。