【问题标题】:local variable 'routingForm' referenced before assignment分配前引用的局部变量“routingForm”
【发布时间】:2020-07-08 13:52:47
【问题描述】:

我正在尝试提交表单,但收到错误“分配前引用的局部变量'routingForm'”。请帮我解决这个问题。

*****forms.py*****

   from django import forms
   class routingForm(forms.Form):
   areaDigit = forms.CharField(label='areaDigit', max_length=100)
   product = forms.CharField(label='product', max_length=100)

*****views.py*****

from django.shortcuts import render
from .forms import routingForm

# Create your views here.
from django.http import HttpResponse,HttpResponseRedirect
from .models import Product,Routing_Dest_Area
def get_route_list(request):
     #areaDigit= request.POST.get('areaDigit', False)
    #data=Routing_Dest_Area.objects.filter(areaDigit_pk=request.POST['areaDigit'])
    if request.method == "POST":
        #Get the posted form
        routingForm = routingForm(request.POST)

        if routingForm.is_valid():
            areaDigit = routingForm.cleaned_data['areaDigit']
    else:
        MyLoginForm = routingForm()

    return render(request, 'routing/test.html',{'areaDigit':areaDigit})

*****home.html*****

<form method="POST" action="{% url 'get_route_list'%}" id="routingForm" name="routingForm">
            {% csrf_token %}
                <div class="form-content">
                    <div class="row">
                        <div class="col-md-6">
                            <div class="form-group">
                                <input type="text" class="form-control" placeholder="Area String *"  
                                 name"areaDigit" id="areaDigit" value="{{areaDigit}}"/>
                            </div>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-md-6">
                            <div class="form-group">
                            <label for="sel1">Select list (select one):</label>
                                 <select class="form-control" id="Product" name="product">
                                   <option> 1</option>
                                   <option> 21</option>
                                </select>
                            </div>
                        </div>
                    </div>
                    <button type="submit" class="btnSubmit">Submit</button>

【问题讨论】:

  • 你不能写routingForm = routingForm(request.POST),因为这会使routingForm成为一个局部变量,并且在分配之前使用它。

标签: python django


【解决方案1】:

你不能写routingForm = routingForm(request.POST),因为这会使routingForm成为一个局部变量,并且在分配之前使用它。

不过我强烈建议您将RoutingForm 写成PerlCase,所以以大写开头:

# app/forms.py

from django import forms

class RoutingForm(forms.Form):
    areaDigit = forms.CharField(label='areaDigit', max_length=100)
    product = forms.CharField(label='product', max_length=100)

函数本身的变量,通常写在snake_case中。那么视图看起来像:

# app/views.py

from django.shortcuts import render
from .forms import RoutingForm

from django.http import HttpResponse, HttpResponseRedirect
from .models import Product, Routing_Dest_Area


def get_route_list(request):
    areaDigit = None
    if request.method == 'POST':
        #Get the posted form
        routing_form = RoutingForm(request.POST)
        if routing_form.is_valid():
            areaDigit = routing_form.cleaned_data['areaDigit']
    else:
    return render(request, 'routing/test.html',{'areaDigit':areaDigit})

【讨论】:

  • 这对我有用...但变量“areaDigit”再次出现相同的错误,但上述解决方案不适用于...请帮助
  • @Jibin:如果你发出 GET 请求,或者使用无效的表单,那么你当然不设置areaDigit,而是在上下文中使用它。见编辑。
  • 我正在使用 post 方法,并且 areaDigit 是有效的。
  • @Jibin:在视图函数顶部添加areaDigit = None是否解决了问题?
  • 实际上在表单中输入值对应于 areaDigit ,当我检查网络时,我只从“表单数据”字段中的选择框中获取值....请检查新图像也添加了
猜你喜欢
  • 1970-01-01
  • 2017-08-10
  • 2020-01-16
  • 2019-12-05
  • 2017-09-19
  • 2020-09-26
  • 2022-01-02
  • 2019-03-22
  • 2019-01-24
相关资源
最近更新 更多