“在assignmen之前引用局部变量'variable'的原因”错误

时间:2019-01-29 09:49:34

标签: python django

我对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})行。 感谢您的宝贵时间,我将非常感谢您的解释和解决方案

2 个答案:

答案 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)