簡體   English   中英

Django上下文:賦值前引用的局部變量

[英]Django context : local variable referenced before assignment

大家下午好,

我的Django project上下文變量有點問題。 我有一個功能,讓我做一些過程。 特別是對我的數據庫進行一些重新搜索並顯示結果。

但我有一個變量的問題: folderId

我收到此錯誤,但我找不到克服它的方法:

Environment:


Request Method: GET
Request URL: http://localhost:8000/Identity/recherche

Django Version: 1.10.3
Python Version: 2.7.12
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'BirthCertificate',
 'Identity',
 'bootstrapform',
 'Accueil',
 'captcha',
 'django_countries',
 'log',
 'Mairie',
 'Table',
 'Recensement']
Installed Middleware:
['django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.middleware.gzip.GZipMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware']



Traceback:

File "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
  39.             response = get_response(request)

File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _legacy_get_response
  249.             response = self._get_response(request)

File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/Users/valentinjungbluth/Desktop/Django/Etat_civil/Identity/views.py" in Identity_Researching
  121.         "folderId" : folderId,

Exception Type: UnboundLocalError at /Identity/recherche
Exception Value: local variable 'folderId' referenced before assignment

我的功能如下:

@login_required
def Identity_Researching(request) :

    #######################
    # Display some arrays #
    #######################

    identitys = Identity.objects.order_by("-id")
    identity = identitys[:3] #The 3 last created forms
    identity_France = identitys.filter(country=64)[:3] #The 3 last created form with BirthCity = France

    ############################
    # People searching process #
    ############################

    query_lastname = request.GET.get('q1')
    query_firstname = request.GET.get('q1bis')
    query_birthday = request.GET.get('q1ter')

    if query_lastname or query_firstname or query_birthday :

        query_lastname_list = Identity.objects.filter(lastname__contains=query_lastname, firstname__contains=query_firstname, birthday__contains=query_birthday) 

        title = str(query_lastname + "_" + query_firstname + "_" + query_birthday)

        ##########################################
        # Look if people directory already exist #
        ##########################################

        url = 'http://demodoc/services/rest/folder/listChildren?folderId=8552450'
        payload = {'folderId': 8552450}

        headers = {'Accept': 'application/json'}
        r = requests.get(url,  params=payload, headers=headers, auth=('etatcivil', '100%EC67'))

        rbody = r.content
        data = json.loads(rbody)

        longueur = len(data)

        i=0
        list = []

        while i < longueur :

            if data[i]["name"] == title :

                list = [data[i]]

            i = i+1

        ############################################
        # We have correspondance, use ID directory #
        ############################################

        if len(list) == 1 :

            folderId = list[0]["id"]

        else : 

            return HttpResponseRedirect('searched')

    else :
        query_lastname_list = Identity.objects.none() # == []


    if "Retour" in request.POST :
        return HttpResponseRedirect('accueil')

    context = {
        "identity" : identity,
        "identity_France" : identity_France,
        "query_lastname" : query_lastname,
        "query_firstname" : query_firstname,
        "query_birthday" : query_birthday,
        "query_lastname_list" : query_lastname_list,
        "folderId" : folderId,
        }

    return render(request, 'resume.html', context)

我錯過了什么或訂單不正確嗎? 當我遇到這種錯誤時,我不太清楚為了克服它我必須做些什么。

感謝您的任何幫助 :)

您正在使用if語句中實例化的變量。 只需在外面創建它:

def Identity_Researching(request):
    folderId = None
    ...

擴展@ Gianluca的答案,看看這個簡單的例子:

list = [1,2]
if len(list) == 1:
    folderId = list[0]

print(folderId)

在這種類似於程序工作方式的情況下, folderId永遠不會被定義,因此在嘗試打印未定義的變量時會拋出NameError 但是,使用這個:

folderId = None
list = [1,2]
if len(list) == 1:
    folderId = list[0]

print(folderId)

反而會打印None作為folderId 已經被定義,即使它的值是None

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM