Вопрос не в том как сделать форму, а как вывести в шаблон index.html, т.е на главную страницу. И сделать так, что бы после отправки, тебя не перебрасывало никуда, а просто снизу или сверху формы вышло сообщение о том, что все отправлено.
Это html же. Что бы не перебрасывало, просто обработку навесить на функцию обработки шаблона, а в форме action оставить туже страницу. А что бы выводило окно поверх, то через аякс. За Вас код надо написать?
не поверх, а сверху или снизу формы. Аякс не нужен. В общем вот функция:
def contact(request):
if request.method == 'POST':
form = NameForm(request.POST
if form.is_valid():
return HttpResponseRedirect('/thanks/')
else:
form = NameForm()
Но вот если я в шаблоне index.html пишу {{form}}, то ничего не выводится, а если я функции contact передаю другой шаблон, например contact.html, то все ок. В action пишу contact.
Нет, эт я ошибся здесь. Просто на index.html рендится две функции def index и def contact. Если первую убрать, то формы контактов грузятся. Я так понимаю просто request перехватывается функцией def index, так вот как request сделат на две функции?
blackbb: Я не совсем понимаю, но почему у вас рендерится 2 функции? Почему нельзя на 1 функцию поставить и рендер страницы и обработку формы? После обработки кинуть в шаблон дополнительные переменные, и там уже обработать.
Функция contact должна быть привязана к url в urls.py. Пропиши там url(r'^contact/', views.contact). А потом уже в index.html. То есть contact - это функция, которая должна брать данные из формы и как-то обрабатывать их, не более того, ни о каком рендеринге еще какой-то страницы в данном случае речь не идет. Разве что можно перерендеривать index.html в случае успеха, скрывая форму и открывая что-то с помощью шаблонизатора или отображать ошибку, если данные не верны, либо делать редирект.
Это все я было сделано, на самом деле проблема была в подключаемом к шаблону файлу javascript, он обрабатывал форму. Отключил его и все теперь отправляется. Спасибо.