2017-08-20 41 views
0

我是新來的Django和我有很多的麻煩與形式。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

爲什麼你使用'{%csrf_token%}'如果你設置'csrf_exempt'裝飾? – ShadowXsc

+0

因爲我不知道我在做什麼。我會刪除它。 – Zoojay

回答

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。

0

請勿在現場生成中使用Django。我會盡全力通過HTML。運行安裝,你現在擁有的,你應該能夠看網頁源代碼,看看輸入的結構如何。然後,您可以手動編寫HTML格式的表單,並根據需要使用JavaScript添加字段。

相關問題