我是django的新手,我在表单方面遇到了很多麻烦。
我正在制作一个基于计算的工具,我需要能够拥有任意数量的输入。
作为一个非常基本的例子,让我们说我想制作一个能够求和减去任意数量输入的计算器。要添加或减去的每个数字都在其自己的数字字段中。两个"添加"的列表字段和"减去"的列表字段有自己的"添加另一个字段"按钮。
首先,这里添加了两个输入(因为我无法弄清楚如何实现1"添加另一个字段按钮"或了解answer to it )。
views.py
from __future__ import unicode_literals
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from .forms import AddForm
def _from_str(s):
try:
s = int(s)
except ValueError:
try:
s = float(s)
except ValueError:
pass
return s
@csrf_exempt
def web_adder(request):
if request.method == 'POST':
form = AddForm(request.POST)
# form = MyForm(request.POST, extra=request.POST.get('extra_field_count'))
if form.is_valid():
return web_adder_out(request, _from_str(form.cleaned_data['addend0']), _from_str(form.cleaned_data['addend1']))
else:
form = AddForm()
# form = MyForm()
return render(request, 'addercontent.html', {'form': form})
def web_adder_out(request, a, b):
return render(request, 'addercontentout.html', {'content':[a + b]})
forms.py
from django import forms
class AddForm(forms.Form):
addend0 = forms.CharField(label='first addend', max_length=100)
addend1 = forms.CharField(label='second addend', max_length=100)
addercontent.html
{% block content %}
<p>This is a web adder</p>
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-default">Enter</button>
</form>
{% endblock %}
addercontentout.html
{% block content %}
{% for c in content%}
Result: {{c}}
<br>
<a href="/" class="btn btn-default">Return</a>
{% endfor %}
{% endblock %}
答案 0 :(得分:0)
这样的东西? (未经测试,我还没有实施添加按钮)
<强> forms.py 强>
class CalcForm(forms.Form)
first = forms.IntegerField()
second = forms.IntegerField()
def add(self):
first = self.cleaned_data['first']
second = self.cleaned_data['second']
return first + second
<强> views.py 强>
def index(request):
if request.method == "POST":
form = CalcForm(request.POST)
if form.is_valid():
result = form.add()
return render(request, 'your_result_template.html', {'result': result})
else:
form = CalcForm()
return render(request, 'your_template.html', {'form': form})
<强> your_template.html 强>
{% block content %}
<p>This is a web adder</p>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-default">Enter</button>
</form>
{% endblock %}
<强> your_result_template.html 强>
{% block content %}
<p>Sum:</p>
<h2>{{ result }}</h2>
{% endblock %}
编辑:对于字段生成,您可能需要javascript。 我不知道你为什么要使用django这种应用程序。
答案 1 :(得分:0)
不要使用Django进行字段生成。我会通过HTML完成所有这些工作。运行您当前拥有的设置,您应该能够查看页面源以查看输入的结构。然后,您可以在HTML中手动编写表单,并根据需要使用JavaScript添加字段。