local variable 'Document' referenced before assignment
我继续获取此变量未绑定错误,但我似乎不明白为什么。
导入它似乎很好。我正在使用django 1-10
from django.shortcuts import render
# Create your views here.
from forms import DocumentForm
from models import Document
def SaveDocument(request):
saved = False
if request.method == "POST":
#Get the posted form
MyDocumentForm = DocumentForm(request.POST, request.FILES)
if MyDocumentForm.is_valid():
print 'It enters here'
Document = Document()
Document.name = MyDocumentForm.cleaned_data["name"]
Document.document = MyDocumentForm.cleaned_data["document"]
Document.save()
saved = True
else:
print 'Fails'
else:
MyDocumentForm = DocumentForm()
return render(request, 'saved.html', locals())
答案 0 :(得分:3)
问题是你只需在SaveDocument()函数中重新定义Document。
只需将本地变量重命名为document
而不是Document
:
document = Document()
答案 1 :(得分:2)
当Python解析函数定义的主体并遇到诸如
之类的赋值时foo = ...
Python默认将foo
解释为局部变量。
因此,当你提到:
Document = Document()
您Document
功能无法再访问导入的SaveDocument()
。为了使其工作,请将其更改为:
document = Document()
并在其余代码中使用document
的引用。
您可以通过告诉Python使用global
的Document
引用(可让您执行当前代码)来验证这一点
global Document
Document = Document()
# NOTE: Do not use this in actual code. It is bad practice to
# override the imported modules, class, function with the variable names
根据Python的The global
statement文档:
全局语句是一个声明,它包含整个当前代码块。这意味着列出的标识符将被解释为全局变量。没有全局变量就不可能分配给全局变量,尽管自由变量可以引用全局变量而不被声明为全局变量。