我对django不太熟悉。正在从事一个学习项目。所以在这里,我得到一个错误,它说UnboundLocalError,“分配前引用了本地变量'url_array'”。这是我的form.py,views.py和html代码。请看看并给我一个解决方案。
forms.py
from django import forms
from .models import Images
class ImageForm(forms.ModelForm):
class Meta:
model = Images
fields = ('__all__')
views.py
class Upload(View):
def post(self, request):
form = ImageForm(request.POST, request.FILES)
if form.is_valid():
form.save()
imageZip=request.FILES
fs = FileSystemStorage()
url_array = []
with ZipFile(imageZip['image'], 'r') as zip:
zip.extractall()
unzip_file= zip.namelist()
for files in unzip_file:
with open(files, "rb") as file:
name = fs.save('read.jpg', file)
url_array.append(fs.url(name))
else:
form = ImageForm()
return render(request, 'toDo_app.html', context = {'form': form, 'url':url_array})
toDo_app.html
<form class="" enctype="multipart/form-data" action="/upload/" method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" >Upload</button>
</form>
<br>
{% if url %}
<p>Uploaded file: </p>
<ul>
{% for urls in url %}
<li> <a href="{{ urls }}">{{ urls }}</a> </li>
{% endfor %}
</ul>
{% endif %}
所以我的错误在return render(request, 'toDo_app.html', context = {'form': form, 'url':url_array})
行。
感谢您的宝贵时间,我将非常感谢您的解释和解决方案
答案 0 :(得分:1)
url_array
在if语句的一个主体内初始化。很有可能if语句不会被评估为true,因此url_array
将在函数返回时未初始化。
只需确保url_array
已在if语句之外用与return语句相同范围的默认值初始化。
答案 1 :(得分:1)
在if块之前分配url_array
def post(self, request):
url_array = []
form = ImageForm(request.POST, request.FILES)