【问题标题】:Django view not returning what I wantDjango视图没有返回我想要的
【发布时间】:2017-01-19 20:41:16
【问题描述】:

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

<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

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

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

    要解决此问题,您必须通过 int(table) 将数字转换为整数

    【讨论】:

    • 请注意,如果用户不提交号码,int(table) 可能会导致 ValueError。如果您使用Django formsIntegerField,那么 Django 将负责验证输入并将值转换为整数。
    【解决方案2】:

    为了扩展给出的其他答案,当您从帖子正文中获取 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,除非你有一个非常非常好的理由这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 2021-04-07
      • 2012-05-10
      • 2011-03-06
      • 2017-03-28
      • 1970-01-01
      相关资源
      最近更新 更多