Обработка ошибок формы Django: Неверный URL?является действительным() - PullRequest
0 голосов
/ 21 августа 2011

Привет, пользователи Stackoverflow,

Меня раздражает обработка формы Django, если форма отправляется на новую страницу и проверка формы не удалась.Я намеревался вернуться к ранее отправленной форме и отобразить сообщение об ошибке для исправления.

Сообщение об ошибке будет отображаться, но URL-ссылка не меняется. Как мне изменить * оператор else оператора is_valid () *, чтобы перенаправить на более раннюю форму?

Спасибо за ваш совет!

urls.py

urlpatterns = patterns("",
    url(r"^add/$", "remap.views.add_project", name="add_project_location"),
    url(r"^add/details/$", "remap.views.add_project_details", name="add_project_details"),
)

views.py

def add_project_details(request):
if request.method == 'POST': # If the form has been submitted...
    locationForm = LocationForm(request.POST) 
    if locationForm.is_valid(): # All validation rules pass
        locality = locationForm.cleaned_data['locality']
        state = locationForm.cleaned_data['state']
        country = locationForm.cleaned_data['country']

        projectForm = ProjectForm(initial = { 
            'locality': locality, 
            'state': state, 
            'country': country, 
        })
        return render_to_response('map/add_project_details.html', {
            'projectForm': projectForm,
        }, context_instance = RequestContext(request))

    else:
        print locationForm.errors 
        return render_to_response('map/add_project_location.html', {
            'locationForm': locationForm,
        }, context_instance = RequestContext(request))
else:
    return HttpResponseRedirect('../') # Redirect to the location reg if site is requested w/o proper location 

Ответы [ 2 ]

4 голосов
/ 21 августа 2011

Нет причин для раздражения по поводу того, что Django делает именно то, для чего он предназначен.

Ваше перенаправление относится к предложению else, соответствующему if request.method == 'POST'.Таким образом, он вступит в силу только в том случае, если это не отправка формы.Другими словами, это представление никогда не будет отображать пустую форму.

Затем, в зависимости от того, является ли форма POSTed действительной, вы отображаете один из двух шаблонов.На данный момент вы не делаете никаких перенаправлений.

Однако, даже если вы попросили Django перенаправить, когда форма недействительна, я сомневаюсь, что вы получите желаемый результат.Это потому, что правила HTTP (не Django) говорят, что вы не можете перенаправить POST - поэтому ваш запрос к перенаправленному представлению будет GET без каких-либо недопустимых данных или сообщений об ошибках.

0 голосов
/ 21 августа 2011

Невозможно обновить URL, если вы не скажете браузеру выполнить перенаправление.Вы возвращаете две разные HTML-версии по одному и тому же URL, что может сбить пользователя с толку.

Вместо этого вам нужно иметь два представления.Представления / add url и add_project_location будут принимать сообщение и проверять его, оставаясь на этом URL-адресе и до успешного просмотра.

При успешном завершении будут установлены некоторые переменные сеанса, перенаправленные на страницу add_project_detailsОбъединить их так просто невозможно из-за работы браузеров.

...