#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])