2016-01-23 56 views
2

我试图使用formtools包没有成功的formwizard(我能做到这一点时,包在里面的Django在早期版本)。Django的formtools向导生成空白页(没有错误返回)

我得到的唯一回应是:

[23/Jan/2016 11:06:50]"GET /registration/wizard HTTP/1.1" 200 13729 

和一个空白页。在浏览器或Eclipse控制台没有错误。

有没有没有错误谷歌搜索的方式。请帮忙。

在此先感谢

我做了什么?

首先,我安装formtools包与PIP:

django-formtools==1.0 
Django==1.8.3 

继官方的文档的指令:

  1. 定义表单类

    登记/ forms.py

    class StepForm1(forms.Form): 
        first_field = forms.CharField(max_length=100) 
        second_field = forms.CharField() 
    
    class StepForm2(forms.Form): 
        message = forms.CharField(widget=forms.Textarea) 
    
  2. 创建WizardView

    登记/ views.py

    TEST_TEMPLATES = {"test_step_1": "registration/test_step1.html", "test_step_2": "registration/test_step2.html", } 
    
    from formtools.wizard.views import SessionWizardView 
    
    class WizardTest(SessionWizardView): 
        template_name = 'registration/test_wizard.html' 
    
        # Return templates for each step 
        def get_templates_name(self): 
         return [TEST_TEMPLATES[self.steps.current]] 
    
        # Method called when all is done 
        def done(self, form_list, **kwargs): 
    
         # return HttpResponseRedirect('/url-to-redirect-to/') 
    
         # We return the final template with the info 
         return render_to_response('test_done.html', { 
                'form_data':[form.cleaned_data for form in form_list], 
                }) 
    
        # THESE METHODS BELOW ARE NOT NEEDED, BUT COMMENTED FOR FUTURE USE 
    
        # Not strictly needed. Returns data for a step 
        # or None if form is not valid 
        # def get_cleaned_data_for_step(self, step): 
        #  return None 
    
        # Form data postprocessing in a concrete wizard step 
        # def process_step(self, form): 
        #  return self.get_form_step_data(form) 
    
        # Handles value from a step before storing them into wizard 
        # def get_form_step_data(self, form): 
        #  return form.data 
    
  3. 创建模板

    登记/ test_step1.html

    <h1>Two fields form</h1> 
    <input id="first_field" name="first_field"> 
    <input id="second_field" name="second_field"> 
    

    注册/ test_step2.html

    <h1>Message form</h1> 
    <input id="message" name="message"> 
    

    注册/ test_wizard.html

    {% extends "person/alumnos.html" %} 
    {% load i18n %} 
    
    {% block head %} 
        {{ wizard.form.media }} 
    {% endblock head %} 
    
    {% block content %} 
    <p>{% trans "Step {{wizard.steps.step1}} of {{wizard.steps.count}}" %}</p> 
    
    <form action="" method="post"> 
    {% csrf_token %} 
    
    {{ wizard.management_form }} 
    
    {% if wizard.form.forms %} 
        {{ wizard.form.management_form }} 
        {% for form in wizard.form.forms %} 
         {{form}} 
        {% endfor %} 
    {% else %} 
        {{ wizard.form }} 
    {% endif %} 
    
    {% if wizard.steps.prev %} 
    <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">{% trans "Beginning" %}</button> 
    <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">{% trans "Previous step" %}</button> 
    {% endif %} 
    <input type="submit" value="submit"/> 
    
    </form> 
    
    {% endblock %} 
    
  4. 增加 'formtools' 我INSTALLED_APPS

    settings.py

    DJANGO_APPS = (
        # Default Django apps: 
        'django.contrib.auth', 
        'django.contrib.contenttypes', 
        'django.contrib.sessions', 
        'django.contrib.sites', 
        'django.contrib.messages', 
        'django.contrib.staticfiles', 
        'formtools',     # <===== HERE 
    
        # Useful template tags: 
        # 'django.contrib.humanize', 
    
        # Admin panel and documentation: 
        'django.contrib.admin', 
        # 'django.contrib.admindocs', 
    ) 
    
    # Apps specific for this project go here. 
    LOCAL_APPS = (
        'person', 
        'registration', 
        'teaching', 
        'utils', 
    ) 
    
    # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps 
    INSTALLED_APPS = DJANGO_APPS + LOCAL_APPS 
    
  5. 点我的URLconf你WizardView as_view()方法。

登记/ urls.py

from registration.forms import StepForm1, StepForm2 
TEST_FORMS = [("test_step_1", StepForm1), ("test_step_2", StepForm2), ] 

from registration.views import WizardTest 

# I tried in two ways, none of them worked 

urlpatterns = patterns('', 
     url(r'^wizard$', WizardTest.as_view(TEST_FORMS), name='wizard_test'), 
     url(r'^wizard2$', views.wizard, name='wizard_test'), 
) 

对于第二种方式...

注册/ views.py

def wizard(request): 
    return WizardTest.as_view(TEST_FORMS)(request) 

回答

1

我发现我的错误。我输入了获取模板的方法名称。这不是

get_templates_name(self) 

get_template_names(self) 

它没有得到任何模板,但返回到服务器时,它与HTTP 200 OK应答,因为它没有发现任何错误。

我还发现,我的每一步的模板应该以正常工作延长主向导模板。 “完成”模板不是必需的。

2

你下你的模板有什么例子? The basic layout is in the docs。试着像这样的东西开始(这两个页面可以使用相同的模板,如果你的罚款与formtools产生的场):

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Form Wizard</title> 
    {{ wizard.form.media }} 

</head> 
<body> 
{% load i18n %} 
<p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p> 
<form action="" method="post">{% csrf_token %} 
<table> 
{{ wizard.management_form }} 
{% if wizard.form.forms %} 
    {{ wizard.form.management_form }} 
    {% for form in wizard.form.forms %} 
     {{ form }} 
    {% endfor %} 
{% else %} 
    {{ wizard.form }} 
{% endif %} 
</table> 
{% if wizard.steps.prev %} 
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">{% trans "first step" %}</button> 
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">{% trans "prev step" %}</button> 
{% endif %} 
<input type="submit" name="submit" value="{% trans "submit" %}"/> 
</form> 
</body> 
</html> 
+0

我编辑的职位,以显示向导模板。它不工作,但 – madtyn

+0

我最后的意见是编辑,因为它可能被误解了。我在同样的情况和形式主要模板一直是他们相同的(我只是忘了把它放在这个计算器后创建时) – madtyn