0

Django には、おおよそ次のような foror ループを持つテンプレートがあります。

{% 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 %}

どちらがフォームを送信しますか。問題は、常に最後のitemfromを送信することitemsです。私はyes引数を取ろうとしましaitemたが、使用<button onclick=yes("{{item}}")>が完全に失敗し、次のことを行ったため、役に立ちませんでした:

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

最後のitemものをitemsもう一度使用するだけです。

誰にとってもこれに対する明らかな解決策はありますか?

4

1 に答える 1

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();
        }
    });
}

このように、djangoforループ内にあるのはボタンだけであり、それぞれが関数に対して異なる引数を持つことになりyesます。これで、yes関数はパラメーターを受け入れ、必要に応じてそれを使用します。ただし、コードスニペットは例のように見え、実際のコードスニペットとは異なるため、ニーズに合わせてこれを変更する必要があります。

于 2012-10-28T21:47:35.043 に答える