#python #html #django #forms #templates
#питон #HTML #django #формы #шаблоны #python
Вопрос:
Я создаю формы непосредственно в HTML-шаблоне django. В этом шаблоне у меня есть 2 формы.
{% extends 'base.html' %}
{% block title %}
<title>Add Groups</title>
{% endblock %}
{% block content %}
<h1>Add Groups</h1>
<form method="post">
{% csrf_token %}
<label>User</label>
<input type="text" name="user_name"/>
<label>Password</label>
<input type="text" name="password"/>
<input type="submit" value="Submit">
</form>
{% if groups %}
<form method="post">
{% csrf_token %}
{% for group in groups %}
<div class="div_group">
<h3>
<input type="checkbox" name="{{group.id}}" value="{{group.name}}">
{{group.name}}</h3>
<div>
<span>Id:</span>
{{group.id}}
<br>
<a href="{{group.link}}">{{group.link}}</a>
<br>
<span>Role:</span>
{{group.role}}
<br>
<span>Tags:</span>
{{group.tags}}
</div>
</div>
{% endfor %}
<input type="submit" value="Add Grupos">
</form>
{% endif %}
<br>
{% endblock %}
В views.py Я пытаюсь отличить себя от форм.
Я сделал это, запрашивая поля, которые появляются только в первой форме
def admin_add_group(request):
if request.user.is_staff and request.user.is_staff:
context = {}
if request.method == 'POST':
if 'user_name' in request.POST:
user_name= request.POST['user_name']
mendeley_password = request.POST['password']
try:
# login mendeley
md.authenticate(mendeley_user, mendeley_password)
groups = md.get_groups()
context['groups'] = groups
except Exception as exc:
context['errors'] = [str(exc)]
else:
c = request.POST
print(c)
# redirect to groups view.
return render(request, 'admin_add_group.html', context)
else:
context = {}
return render(request, 'admin_add_group.html', context)
Есть ли другой способ узнать, какая форма отправляет запрос post?
может быть, добавить скрытый ввод? только для этой цели я хотел бы знать, какая практика является наилучшей.
Комментарии:
1. добавить url в действие в форме
2. В этом нет необходимости, потому что по умолчанию django отправляет запрос post на тот же URL страницы. Затем внутри представления я могу управлять запросом post.
Ответ №1:
Я добавил скрытое поле с name="form_id"
в обеих формах
<form method="post">
{% csrf_token %}
<input type="hidden" name="form_id" value="groups_data">
...
<form method="post">
{% csrf_token %}
<input type="hidden" name="form_id" value="user_data">
...
и в представлении, которое я просил об этом:
if request.method == 'POST':
if request.POST['form_id'] == 'user_data':
...
Ответ №2:
Вы можете назвать кнопки отправки name="form1submit"
, а затем спросить, была ли нажата эта кнопка, путем поиска этого имени в request.POST
dict .
if 'form1submit' in request.POST:
# is the form 1
else:
# is the form 2