如何从Django FormTools中获取FormPreview?

时间:2017-11-08 16:09:19

标签: django django-forms

我尝试创建Django FormTools的FormPreview的最小工作示例,但它不起作用。

forms.py

这是一种非常简单的形式。

from django.forms import CharField, Form, Textarea


class TextForm(Form):
    text = CharField(widget=Textarea)

preview.py

只需从文档中复制一下即可进行轻微调整。这是诅咒不完整但我没有改变它,因为我甚至没有进入任何类型的预览页面。

from django.http import HttpResponseRedirect

from formtools.preview import FormPreview


class TextFormPreview(FormPreview):
    def done(self, request, cleaned_data):
        # Add stuff later, once I get to a preview.
        return HttpResponseRedirect('/')

urls.py

这里肯定有些错误,但我不知道它应该如何正确。我应该删除第一个网址吗? FormPreview如何知道正确使用的视图是什么?

from django.conf.urls import url
from django import forms

from .forms import TextForm
from .preview import TextFormPreview

from . import views

urlpatterns = [
    url(r'^$', views.textform),
    url(r'^post/$', TextFormPreview(TextForm)),
]

views.py

我的简单views.py。

from django.shortcuts import render

from .forms import TextForm


def textform(request):
    if request.method == 'POST':
        form = TextForm(request.POST)
        if form.is_valid():
            text = form.cleaned_data['text']
            print(text)
    if request.method == 'GET':
        form = TextForm

    context = {
        'form': form
    }
    return render(request, 'text.html', context)

模板/ text.html

一个简单的模板。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Text</title>
</head>
<body>
<form action="" method="post">
    {% csrf_token %}
    {{ form.non_field_errors }}
    <div class="fieldWrapper">
        {{ form.manual_recipients.errors }}
        {{ form.text }}
    </div>
    <input type="submit" value="OK"/>
</form>
</body>
</html>

模板/ base.html文件

base.html只是一个空文件。如果我去^ post / $它说它需要base.html。为什么?我不知道。

如上所述,我从文档中完成了所有步骤,但显然不完整。我该如何解决?

1 个答案:

答案 0 :(得分:3)

FormPreview的{​​{3}}延伸base.html。并包含单个块内容。

在您的base.html中,您需要包含{%block content%} {%endblock%}。最小的模板是:

<html>
<body>
  {% block content %}{% endblock %}
</body>
</html>

有关详细信息,请参阅default template上的文档。