UnboundLocalError - локальная переменная, на которую ссылаются перед присваиванием - Django - PullRequest
2 голосов
/ 20 августа 2011

Вы, ребята, очень помогли мне на этой неделе, это было потрясающе. Надеюсь, вы можете помочь мне с этим. Я попытался просмотреть другие сообщения на сайте об этом типе ошибки, но ни одна из них действительно не выручала меня. По сути, я отправляю форму на одной странице, и данные POST переходят в то же представление, с которым они были созданы. Я хочу перенаправить на другую страницу после отправки данных POST, но я получаю эту ошибку.

def test(request):
    if request.method == 'POST':
        form = SubmitForm(request.POST) # A form bound to the POST data
        if form.is_valid():
            lat = form.cleaned_data['lat'] 
            lng = form.cleaned_data['lng']
            title = form.cleaned_data['title']
            story = form.cleaned_data['story']

            ctxt = {
                    'lat':lat,
                    'lng':lng,
                    'title':title,
                    'story':story,
                    }

            return render_to_response('home.html', ctxt, context_instance=RequestContext(request)) 

    else:

        import datetime
        now = datetime.datetime.now()
        form = SubmitForm()
        latest_marks = Marker.objects.all().order_by('-submitted')[0:10]

        ctxt = {
                'marks':latest_marks,
                'now':now.date(),
                'form': form,
                }
    return render_to_response('test.html', ctxt, context_instance=RequestContext(request)) 

Я получаю ошибку

local variable 'ctxt' referenced before assignment

И трассировка

Environment:


Request Method: POST
Request URL: http://localhost:8000/test/

Django Version: 1.3
Python Version: 2.6.5
Installed Applications:
['django.contrib.staticfiles',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.admin',
 'userena',
 'guardian',
 'easy_thumbnails',
 'south',
 'database',
 'accounts',
 'socialregistration']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'userena.middleware.UserenaLocaleMiddleware',
 'socialregistration.middleware.FacebookMiddleware')


Traceback:
File "/home/wluw/dev/chicagomap/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/wluw/dev/chicagomap/chicagomap/../chicagomap/database/views.py" in test
  58.     return render_to_response('test.html', ctxt, context_instance=RequestContext(request)) 

Exception Type: UnboundLocalError at /test/
Exception Value: local variable 'ctxt' referenced before assignment

Любая помощь будет принята с благодарностью. Благодаря.

1 Ответ

7 голосов
/ 20 августа 2011

Это происходит потому, что request.method == 'POST' - это Истина (первое условие проходит), а form.is_valid() - Ложь (второе вложенное условие не выполняется), что означает окончательный возврат после выполнения else, но ctxt не определен.

Возможно, вы предполагали, что окончательный возврат будет иметь отступ, как часть предложения else?

...