Джанго: Отправить очки по неправильному URL - PullRequest
0 голосов
/ 20 февраля 2011

У меня есть две формы в одном приложении, одна основана на Django FormWizard и "нормальной" форме. «Нормальная» форма работает нормально, но когда я использую форму, созданную мастером, пользователь перенаправляется на обычную форму и не переходит к следующему шагу формы.

Форма мастера находится в ../app/NewEntry. Когда я сталкиваюсь со 2-м этапом формы и нажимаю на кнопку отправить, я перенаправляюсь на ../app, даже если в HTML-коде написано action = '.' в HTML-файл.

Поскольку это происходит только на втором этапе, я подумал, что это как-то связано с функцией render_template, но я не понимаю, почему.

forms.py выглядит так:

  1 from django.http import HttpResponseRedirect
  2 from django.contrib.formtools.wizard import FormWizard
  3 from django import forms
  4 from django.forms.widgets import RadioSelect
  5 from geoCode import getLocation
  6 from renooble.pp.models import Project
  7
  8 class appStart(forms.Form):
  9     location = forms.CharField()
 10     CHOICES = [(x, x) for x in ("cars", "bikes")]
 11     technology = forms.ChoiceField(choices=CHOICES)
 12
 13 class appLocationConfirmation(forms.Form):
 14    locations = forms.CharField()
 15
 16 class appData(forms.Form):
 17     capacity = forms.IntegerField()
 18
 19 class appWizard(FormWizard):
 20
 21     def render_template(self, request, form, previous_fields, step, context=None):
 22         if step == 1:
 23             location = request.POST.get('0-location')
 24             address, lat, lng, country = getLocation(location)
 25             form.fields['locations'] = forms.ChoiceField(widget=RadioSelect(), choices = [])
 26             form.fields['locations'].choices = [(x, x) for x in address]
 27         return super(appWizard, self).render_template(request, form, previous_fields, step, context)
 28
 29
 30     def done(self, request, form_list):
 31         # Send an email or save to the database, or whatever you want with
 32         # form parameters in form_list
 33         return HttpResponseRedirect('/contact/thanks/')
 34
 35 class reMapRedefine(forms.Form):
 36     LIMIT_CHOICES = (
 37     ('1', '1'),
 38     ('2', '2'),
 39     ('30', '30'),
 40     )
 41     numberLimit = forms.CharField(widget=forms.Select(choices=LIMIT_CHOICES))
 42
 43     country_list = [('Worldwide', 'Worldwide')]
 44     country_list = country_list + [(query.country, query.country) for query in Project.objects.all()]
 45     country = forms.ChoiceField(required=False, label='Country', choices=country_list)

urls.py определены следующим образом

######################################################
     (r'^app/$', app_startpage),
     (r'^app/NewEntry$', appWizard([appStart, appLocationConfirmation, reMapData])),
######################################################

Итак, как только вызывается appLocationConfirmation, URL-адрес изменяется с / app / NewEntry (url для мастера) на / app. Я не понимаю, почему?

Любая помощь или разъяснение высоко ценится. Спасибо.

1 Ответ

1 голос
/ 05 сентября 2012

Ранее я сталкивался с подобной проблемой из-за отсутствия последней косой черты.Я сомневаюсь, что оригинальный постер ответит в эту позднюю дату, но для любого, кто сталкивается с этим вопросом, дважды проверьте, что ваш URLconf включает в себя косую черту, например:

r'^reMap/NewEntry/$' вместо r'^reMap/NewEntry$'.

...