Переменная ‘name’ в форме шаблона django

#forms #django-templates #django-views

#формы #django-шаблоны #django-представления

Вопрос:

У меня есть следующий шаблон, в котором есть кнопки «добавить» и «удалить»:

 <tr>
    <td>Position</td>
    <td>{{ form.position }}<input type="submit" value="add" , name='add'/></td>
</tr>
<tr>
    <td> </td>
    <td>
        {% for position in positions %}
        {{ position}}<input type="submit" value="Delete", name="delete-position.{{ position }}"/> 
        {% endfor %}
    </td>
</tr>
  

Как бы я построил views.py функция для поиска name значения кнопки отправки удаления? В настоящее время у меня есть:

     try:
        request.POST['add']
        positions.append(request.POST['position'])          
        return render_to_response('registration/getting_started_info1.html', {'form': form, 'positions': positions}, context_instance = RequestContext(request))
    except: 
        if 'delete-position' in request.POST:
            positions.remove(### how to get name of Delete submit? ###)
            return render_to_response('registration/getting_started_info1.html', {'form': form, 'positions': positions}, context_instance = RequestContext(request))
  

Кроме того, есть ли лучший способ создать представление / шаблон, чтобы я мог использовать if...else вместо try...except ?

Ответ №1:

Во-первых, вам, вероятно, следует сделать это:

 if request.method == "POST":
    if 'add' in request.POST.keys():
        positions.append(...)
        return render_to_response(...)
    else:
        for k, v in request.POST.items():
            if k.startswith('delete-position'):
                positions.remove(k)
                return render_to_response(...)
  

Это должно помочь с тем, что вы просите… однако я не уверен, что это самый простой способ сделать то, что вы пытаетесь сделать.

Ответ №2:

Сохраните позиции в сеансе.

Ответ №3:

Ваш try-catch какой-то странный. Вероятно, вам следует отправлять запросы на удаление в другое представление.

Но что касается того, как вы можете получить delete-position переменные, это просто:

 def delete(request):
    if request.method == "POST":
        for key in request.POST.keys():
            if key.startswith('delete-position'):
                positions.remove(request.POST[key])