首页 > 解决方案 > 使用 django 表单进行数学运算并避免重定向

问题描述

我想在 Django 中有一个表格做一些数学运算并吐出一个不会以重定向结束的结果,并在同一页面上给我结果(即不刷新)。

例如:

视图.py:

def collisionrisk(request):
    assert isinstance(request, HttpRequest)

    form_class = CRMForm
    result = ''
    if request.method == 'POST':
        form = form_class(data=request.POST)

        if form.is_valid():
            D = form.cleaned_data['D']
            B = form.cleaned_data['B']
            b = form.cleaned_data['b']

            result = D*B+b
            return HttpResponse('')
    else:

        return render(
            request,
            'Collision_risk.html',
            {
                'form':form_class,
                'result':result
            }
        )

表格.py:

class CRMForm(forms.Form):
    D = forms.DecimalField(required=True)
    B = forms.IntegerField(required=True)
    b = forms.IntegerField(required=True)

    def __init__(self, *args, **kwargs):
        super(CRMForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)

        self.fields['b'].label = 'b'

        self.helper.layout = Layout(
            Div(
                Div('D',css_class='col-lg-offset-2 col-md-offset-2 col-lg-1 col-md-1 col-sm-12 col-xs-12'),
                Div('B',css_class='col-lg-1 col-md-1 col-sm-12 col-xs-12'),
                Div('b',css_class='col-lg-1 col-md-1 col-sm-12 col-xs-12'),
                css_class='row',
                css_style='padding-left:50px;padding-right:50px;'
            )
        )
        self.helper.add_input(Submit('submit', 'Submit', css_class='btn-primary outline',action="."))
        self.helper.form_method = 'POST'

基本上,在我的模板中,我希望用户点击“提交”,然后数学结果出现在同一页面上的指定 div 中(即直接在按钮下方而不重定向到新页面)。

我可以很容易地在 Jquery 中做到这一点,但我有兴趣了解是否有一种纯 Django 方法可以首先做到这一点。

谢谢各位!

标签: pythondjango

解决方案


if从语句替换语句

          return render(
            request,
            'Collision_risk.html',
            {
                'form': form_class,
                'result': result
            }
        )

经过

from rest_framework.response import Response
return Response(request, 'Collision_risk.html', {'result':result})

推荐阅读