Получение значения элемента в шаблоне django для цикла - PullRequest
0 голосов
/ 22 мая 2011

Используя django, у меня есть форма, в которой пользователь вводит свой 'position'.Пользователь может добавить несколько позиций.Пользователь также может удалять позиции.При этом следует отметить две вещи:

1) в форме есть две кнопки: 'Add' и 'Delete'.

2) Я использую цикл for вшаблон для заполнения списка позиций и кнопок удаления.

Это то, что у меня сейчас есть:

# in template
<tr>
    <td>Position</td>
    <td>{{ form.position }} 
        <input type="submit" value="Add" , name='action'/>
    </td>
</tr>
<tr>
    <td> </td>
    <td>
        {% for position in positions %}
            {{ position}}
            <input type="submit" value="Delete {{position }}", name='action'/> 
        {% endfor %}
    </td>
</tr>

# in views.py
    ...
    if action == 'Add':
        positions.append(request.POST['position'])
        return render_to_response(...)
    if 'Delete' in action:
        positions.remove(request.POST['action'][7:])
        return render_to_response('...)

Это выглядит как очень не элегантный способ выполнить часть «Удаление».

Есть ли лучший способ получить значение position, без необходимости вводить дополнительную информацию в 'Delete' submit button, а затем разрезать ее, чтобы получить ее значение?

1 Ответ

2 голосов
/ 23 мая 2011

Здесь я вижу три варианта:

  1. Используйте поле флажка для каждой позиции и одну кнопку «Удалить». В этом случае пользователь может выбрать несколько позиций для удаления, и вы можете легко получить их идентификаторы из запроса.

  2. Используйте скрытое поле position и немного Javascript, чтобы заполнить его. Если вы используете jquery, это может быть:

    <input type="hidden" name="position" value="" />
    
    {% for position in positions %}
      <input type="submit" value="Delete" name="action" data-position="{{ position }}" />;
    {% endfor %}
    
    <script type="text/javascript">
       var $position_input = $("input[name='position']");
       $("input[name='action'][value='Delete'].click(function(e) {
          var $this = $(this);
          var position = $this.data("position");
          $position_input.val(position);
       });
    </script>
    
  3. Вставить идентификатор позиции в атрибут имени, например:

    <input type="submit" value="Delete" name="delete-position.{{ position }} />
    

    В функции просмотра вам нужно просмотреть все данные в request.POST и найти все элементы, которые начинаются с delete-position, а затем использовать нарезку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...