我尝试创建Django FormTools的FormPreview的最小工作示例,但它不起作用。
这是一种非常简单的形式。
from django.forms import CharField, Form, Textarea
class TextForm(Form):
text = CharField(widget=Textarea)
只需从文档中复制一下即可进行轻微调整。这是诅咒不完整但我没有改变它,因为我甚至没有进入任何类型的预览页面。
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('/')
这里肯定有些错误,但我不知道它应该如何正确。我应该删除第一个网址吗? 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。
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)
一个简单的模板。
<!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只是一个空文件。如果我去^ post / $它说它需要base.html。为什么?我不知道。
如上所述,我从文档中完成了所有步骤,但显然不完整。我该如何解决?
答案 0 :(得分:3)
FormPreview
的{{3}}延伸base.html
。并包含单个块内容。
在您的base.html中,您需要包含{%block content%} {%endblock%}。最小的模板是:
<html>
<body>
{% block content %}{% endblock %}
</body>
</html>
有关详细信息,请参阅default template上的文档。