У меня есть html-форма и кнопка отправки (она добавляет или удаляет отношения во многих пользователей ")":
{% if user in event.users.all %}
<form action="/event/{{ event.id }}/" method="GET">
<input type="hidden" value="{{ event.id }}" name="remove">
<input type="submit" value="Remove">
</form>
{% else %}
<form action="/event/{{ event.id }}/" method="GET">
<input type="hidden" value="{{ event.id }}" name="add">
<input type="submit" value="Add">
</form>
в views.py:
def show_event(request, event_id):
...
event = get_object_or_404(Event, id=event_id)
user = request.user
if request.GET.get('add'):
event.users.add(user)
event.save()
if request.GET.get('remove'):
event.users.remove(user)
event.save()
return render(request, 'events/event.html', {'event':event, 'user':user,})
Эта функция работает нормально, но страница обновляется после отправки формы. Мне не нужно обновляться, и мне нужно изменить текст кнопки, как кнопка "Follow" в Twitter. Я попытался использовать некоторый jquery\ajax, но я точно не понимаю, как он должен работать. Может ли кто-нибудь объяснить, как это сделать? Благодарю.
Вот очень простой пример ajax. В вашей форме вы можете запустить свой метод ajax с помощью:
<a onclick="AjaxFormSubmit()" href="#">Submit</a>
Тогда ваш метод ajax будет выглядеть следующим образом:
function AjaxFormSubmit() {
$.ajax({
url : '/event/{{ event.id }}/',
type : "POST",
data : { the_post : $('#id-of-your-field').val() }
}).done(function(returned_data){
// This is the ajax.done() method, where you can fire events after the ajax method is complete
// For instance, you could hide/display your add/remove button here
});
}
Я рекомендую посмотреть документацию Ajax, чтобы просмотреть все доступные Ajax-методы.
Кроме того, на ваш взгляд, вам нужно будет вернуть (в этом примере) данные json через HttpResponse. т.е.
return HttpResponse(json.dumps(your_data))
# I like to return success/fail Booleans, personally
* Обратите внимание, что это непроверенный код.
event.id
, но вы можете просто передать это в качестве аргумента AjaxFormSubmit