Skip to main content
 首页 » 编程设计

python之使用 Django 表单进行数学运算并避免重定向

2025年05月04日31xiaohuochai

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

例如:

View .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 方法可以首先做到这一点。

谢谢大家!

请您参考如下方法:

替换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})