2013-09-24 6 views
0

Это может быть очевидно для некоторых, но я не могу понять, как переждать get_template_name, чтобы предоставить другой шаблон для разных шагов моего form wizard. Вот то, что я до сих пор:Пользовательские шаблоны Django Formwizard

class StepOneForm(forms.Form): 
    color = forms.ChoiceField(choices=COLOR_CHOICES) 
    ... 

class StepTwoForm(forms.Form): 
    main_image = forms.ImageField() 
    ... 

class StepThreeForm(forms.Form): 
    condition = forms.ChoiceField(choices=CONDITION) 
    ... 

class CreateWizard(SessionWizardView): 
    file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT)) 
    def done(self, form_list, **kwargs): 
     id = form_list[0].cleaned_data['id'] 
     try: 
      thing = Thing.objects.get(pk=id) 
      instance = thing 
     except: 
      thing = None 
      instance = None 
     if thing and thing.user != self.request.user: 
      raise HttpResponseForbidden() 
     if not thing: 
      instance = Thing() 
      for form in form_list: 
       for field, value in form.cleaned_data.iteritems(): 
        setattr(instance, field, value) 
      instance.user = self.request.user 
      instance.save() 
     return render_to_response('wizard-done.html', { 
       'form_data': [form.cleaned_data for form in form_list],}) 

urls.py:

url(r'^create/$', login_required(CreateWizard.as_view([StepOneForm, StepTwoForm, StepThreeForm])), name='create_thing'), 

Я прочитал документацию Django и пытался использовать метод, описанный здесь. В моих формах:

FORMS = [("step_one", myapp.forms.StepOneForm), 
     ("step_two", myapp.forms.StepTwoForm), 
     ("step_three", myapp.forms.StepThreeForm)] 

TEMPLATES = {"step_one": "myapp/step-one.html", 
      "step_two": "myapp/step-two.html", 
      "step_three": "myapp/step-three.html"} 

class CreateWizard(SessionWizardView): 
    def get_template_names(self): 
     return [TEMPLATES[self.steps.current]] 
     ...etc. ... 

Но это возвращает KeyError at u'0'. Как я могу заставить мой мастер форм отображать разные шаблоны для каждого шага?

ответ

2

Этапы Джанго мастера формы являются '0', '1', '2', ... поэтому вам необходимо обновить TEMPLATES Dict в

TEMPLATES = {"0": "myapp/step-one.html", 
      "1": "myapp/step-two.html", 
      "2": "myapp/step-three.html"} 

И затем использовать его get_template_names как вы сделали:

class CreateWizard(SessionWizardView): 
    def get_template_names(self): 
     return [TEMPLATES[self.steps.current]] 
+0

Спасибо вам правильно! –

Смежные вопросы