Django认为没有返回我想要的东西

时间:2017-01-19 20:41:17

标签: django django-templates django-views

我试图从表单中显示数字的乘法表。这是我的模板。

<form method="post" action="/home/result/">
    <p>Enter your name</p>
    <p><input type="text" name="nombre"></p>
    <p>Enter you last name</p>
    <p><input type="text" name="apellido"></p>
    <p>Enter number for the table of that number</p>
    <p><input type="number" name="table1"></p>
    <p><input type="submit" name="Submit"></p>


</form>

现在,这是我的观点

    @csrf_exempt
def get_name(request):
    numbers = []
    if request.method == 'POST':
        nombre = request.POST.get('nombre')
        apellido = request.POST.get('apellido')
        table = request.POST.get('table1')

        for i in range(1, 13):
            numbers.append(i*table)

        context = {
            'nombre': nombre,
            'apellido': apellido,
            'numbers': numbers
        }

        template = loader.get_template('home/result.html')

        return HttpResponse(template.render(context, request))
    else:
        template = loader.get_template('home/nombre.html')
        return HttpResponse(template.render())

这是我的另一个观点,result.html

<p>Hello {{ nombre }} {{ apellido }}</p>
    {% for number in numbers %}
        {{ number }}<br />
    {% endfor %}

所以,我输入6,这就是我所看到的。我在终端上尝试了这个,我得到了正确的结果。这有什么不对?

6
66
666
6666
66666
666666
6666666
66666666
666666666
6666666666
66666666666
666666666666

2 个答案:

答案 0 :(得分:3)

你在这里遇到的问题是你传递给视图的'6'实际上是一个字符串。所以当你乘以它时,你正在执行字符串乘法,它只重复字符串。

要解决此问题,您必须通过执行<CustButton@Button>: font_size: 28 <DemoGridLayout>: id:test display:entry rows:3 cols:2 padding:10 spacing:10 entry: entry entrye: entrye TextInput: id: entry font_size:20 multiline:True TextInput: id: entrye font_size:20 multiline:True CustButton: id: b1 size_hint_y:0.1 text:"Update" on_press:test.update(entry.text) CustButton: id: b2 size_hint_y:0.1 text:"Updatee" on_press:test.updatee(entrye.text) CustButton: size_hint_y:0.1 size_hint_x:0.5 text:"Clear" on_press:test.clear()

将数字转换为整数

答案 1 :(得分:0)

为了扩展给出的另一个答案,当你从帖子体中得到它时,table就是一个字符串。您必须将其转换为具有int()功能的整数。在您的代码的上下文中:

def get_name(request):
numbers = []
if request.method == 'POST':
    nombre = request.POST.get('nombre')
    apellido = request.POST.get('apellido')
    table = request.POST.get('table1', 0) # this adds a default, in case table1 is empty 
    table = int(table) # converts the string into an integer
...
然后你继续你从那里开始。

作为参考,你不应该在生产应用程序中使用@csrf_exempt,除非你有一个非常非常好的理由。

相关问题