繁体   English   中英

分配Django错误之前引用的局部变量

[英]local variable referenced before assignment django error

这是我的view.py,当我有一个表单,当我使用必填字段提交表单时,它会提供适当的输出,但是当我在表单中不输入任何内容并单击提交时,我会收到一条错误消息,提示“本地变量'researcher'分配前引用”。

我也想知道如何将表格数据保存在目标页面上

def about_experiment(request,ex_link_name):

    if request.method == 'POST':
        form = AboutHelp(request.POST)
        if form.is_valid():
            researcher = form.cleaned_data['researcher']
            study = form.cleaned_data['study']

    else:
        form = AboutHelp()
    return render(request, 'about_experiment.html', {'researcher': researcher, 'study': study})

我在源页面上的表单是

<form action="{% url 'lazer.views.about_experiment' exp.link_name %}" method="POST" name="form"> 
  {% csrf_token %}
      <label>Researcher Name(s):<input type="text" name="researcher">
    <lable>Study Summary<textarea rows="10" cols="50" placeholder="here you go" maxlength="500" class="form-control" name="study"></textarea>
      <br>
      <input type = "submit" value="Submit" class="btn btn-primary" />
  </form>

表单输出所在的我的目标页面

<h4> Name : {{ researcher }} </h4><br>
<h4> Summary : {{ study }} </h4>

如果请求方法不是POST且表格无效,则study researcherstudy人员不分配。 您应该在if语句之前定义此变量:

def about_experiment(request,ex_link_name):
    researcher = ''
    study = ''
    if request.method == 'POST':
    ...  

在views.py的其他部分中,您提到了在render方法中产生此错误的研究员变量。

所以请加上

researcher = None

在if语句之前

并添加

study = None

这也会产生相同的错误

表格

from django import forms
from .models import AboutHelp

    class AboutHelpForm(forms.ModelForm):
        class Meta:
            model = AboutHelp
            fields = '__all__'

views.py

def about_experiment(request,ex_link_name):
    researcher = None 
    study = None
    form = AboutHelpForm(request.POST or None)
    if request.method == 'POST':
        if form.is_valid():
            form.save()
    return render(request, 'about_experiment.html', {'researcher': researcher, 'study': study})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM