Форум сайта python.su
Пользователь через форму отправляет запрос на серер. Ссылки такие:
site.ru/main/registration/ -> site.ru/main/registration/email
return render(request, 'main/reg.html', {'error': 'ERROR'})
Офлайн
Надо средиректить на другой урл c параметрами в гете,
return HttpResponseRedirect("main/registration/reg/?error=ERROR")
Офлайн
FishHookHttpResponseRedirect конечно однозначно бросает куда надо. Думал об этом, но это как-то не красиво… Нагуглил что можно этим делом управлять с помощью javascript (проверять значения перед отправкой)… Надо будет на досуге попробовать.
Надо средиректить на другой урл c параметрами в гете,
Офлайн
Подскажите еще как в template GET прочитать?
А ссылку (вид вот такой: main/registration/?errcode=1) в итоге гинерю вот так:
import urllib def url_gen(path, **kwargs): return path + '?' + urllib.urlencode(kwargs) def email(request): errcode = None if request.POST['email'] != request.POST['email_again']: errcode = 1 elif request.POST['password'] != request.POST['password_again']: errcode = 2 if isinstance(errcode, int): url = url_gen(reverse('main:reg'), errcode=errcode) return HttpResponseRedirect(url) return HttpResponseRedirect(reverse('main:index'))
Офлайн
Вы можете передать нужное вам значение через вьюху. Ессли вам этого покажется недостаточно, то в settings придется подключить django.core.context_processors.request.
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS TEMPLATE_CONTEXT_PROCESSORS += ( 'django.core.context_processors.request', )
request.GET.error
Отредактировано pythonlove (Май 6, 2014 17:17:14)
Офлайн
pythonlove
Cпасибо! Я как раз уже нашел подобное. С передачей через вьюху у меня пока сплошные проблемы Но дело движется! Думаю воспользуюсь вторым вариантом.
PS
Если подскажите как передать использую пример с HttpResponseRedirect (использую чтоб URL сменился), буду признателен вдвойне.
Офлайн
Возможно, вы меня неправильно поняли, я ничего особенного не имел в виду ) Вы же куда-то редиректите пользователя, и затем какая-то вьюха рендерит темплейт, в котором вам нужно получить значение, передающееся через GET. И вот из нее вы можете передавать в темплейт что угодно.
return render(request, 'main/reg.html', { 'error': request.GET.get('error') })
Отредактировано pythonlove (Май 6, 2014 20:41:11)
Офлайн
О Forms я как раз узнал. Вообще это регистрация пользователя. Когда он что-то неверно внесёт его должно кинуть обратно и над формой написать, что конкретно он внёс неверно. И, как бы, логично если у пользователя будет не новый урл (где ему сообщается, что он среди счастливчиков), а старый (main/registration/). Форму можно заполнить данными, что ранее вносил пользователь, как я думаю, через Forms, убрав кривые данные.
Вроде с Forms все ясно, но надо тестить. Сходу не понял, что мне с нее взять. С пользователя я буру только мыло и пароль, и оба в двух экземплярах, потом проверяю, что совпадает и тогда буду записывать в базу (еще нужно письмо отправить…).
Вариант с render просто. И форму регистрации показать и просто передать ошибку. Но все портит урл ))
Офлайн
Обычно в таких случаях форму обрабатывают в той же самой вьюхе, которая выводит ее пользователю. Как в этом примере. Если сделать так же, тогда с вашим урлом все нормально будет.
Отредактировано pythonlove (Май 6, 2014 22:14:49)
Офлайн
Как раз по доке, что указали, сделал себе contact. Только пока одна проблема: как мне добавить свой стиль к такому выводу?? Вот код:
<tr> <td class="right"><label for="id_subject">*Subject:</label></td> <td>{{ form.subject }}</td> </tr>
Офлайн