2014-12-13 3 views
0

Может кто-нибудь объяснить мне, что означает эта ошибка? Что такое назначение? Где context_dict должен быть? Или я сделал еще одну ошибку? Я новичок в Django. Огромное спасибо.Локальная переменная 'context_dict', указанная перед назначением

def add_page(request, category_name_slug): 
    try: 
     cat = Category.objects.get(slug=category_name_slug) 
    except Category.DoesNotExist: 
     cat = None 

    if request.method == 'POST': 
     form = PageForm(request.POST) 
     if form.is_valid(): 
      if cat: 
       page = form.save(commit=False) 
       page.category = cat 
       page.views = 0 
       page.save() 
       # probably better to use a redirect here. 
       return category(request, category_name_slug) 
      else: 
       print form.errors 
     else: 
      form = PageForm() 

     context_dict = {'form':form, 'category': cat} 

    return render(request, 'rango/add_page.html', context_dict) 

Я получил эту ошибку:

local variable 'context_dict' referenced before assignment 

и исключение указывает мне на линии с возвратом визуализации (reqyest, 'Ранго/add_page.html', context_dict)

тот же Traceback

+0

Если метод запроса не является '' POST'', вы не определяете 'context_dict', но вы пытаетесь использовать его в последней строке. – Matthias

ответ

0

Помните, что в отступе Python важно. Проблема в том, что ваша переменная context_dict не имеет ссылки за пределами оператора if из-за ее отступов. Таким образом, объявить переменную context_dict вне если заявления, как так:

context_dict = {} 
    if request.method == 'POST': 
    <rest of code here> 
+0

да что работает :) спасибо – Anita

0

Попробуйте этот код, чтобы отвечать на запросы POST.

def add_page(request, category_name_slug): 
    try: 
     cat = Category.objects.get(slug=category_name_slug) 
    except Category.DoesNotExist: 
     cat = None 

    if request.method == 'POST': 
     form = PageForm(request.POST) 
     if form.is_valid(): 
      if cat: 
       page = form.save(commit=False) 
       page.category = cat 
       page.views = 0 
       page.save() 
       # probably better to use a redirect here. 
       return category(request, category_name_slug) 
      else: 
       print form.errors 
     else: 
      form = PageForm() 

     context_dict = {'form':form, 'category': cat} 
     # indented - only reply to post requests 
     return render(request, 'rango/add_page.html', context_dict) 
    # if this is not a post request, raise an exception (handle your way later..) 
    raise Exception('NOT A POST REQUEST') 
+0

таким образом я получил ошибку: НЕ ЗАПРОС ПОСЛЕ, но я фактически объявил переменную context_dict вне инструкции if, и она работает :) – Anita

+0

Ошибка была преднамеренной. Вам нужно решить, как вы справляетесь с этим, и удалите ошибку, если это не ошибка. –

0

Я снова факторизуюсь мой код еще раз и этот способ работает. Мой context_dict теперь находится вне внешнего оператора if и else: form = PageForm() находится во внешнем выражении if теперь не так, как указано во внутренней инструкции if. Спасибо, ребята, за то, что помогли мне.

def add_page(request, category_name_slug): 
    try: 
     cat = Category.objects.get(slug=category_name_slug) 
    except Category.DoesNotExist: 
     cat = None 

    if request.method == 'POST': 
     form = PageForm(request.POST) 
     if form.is_valid(): 
      if cat: 
       page = form.save(commit=False) 
       page.category = cat 
       page.views = 0 
       page.save() 
       # probably better to use a redirect here. 
       return category(request, category_name_slug) 
      else: 
       print form.errors 
    else: 
     form = PageForm() 

    context_dict = {'category': cat, 'form': form} 

    return render(request, 'rango/add_page.html', context_dict) 
Смежные вопросы