2014-12-13 62 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)

相同回溯

+0

如果请求方法不是“POST”,那么您不要定义'context_dict',而是尝试在最后一行使用它。 – Matthias 2014-12-13 18:17:00

回答

0

请记住,在Python中,缩进非常重要。问题是你的变量context_dict在if语句之外没有任何引用,因为它是如何缩进的。所以,你声明的变量context_dict为这样的if语句外:

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

是的,工作:)谢谢 – Anita 2014-12-14 13:21:20

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

这样我得到的错误:不是POST请求,但实际上我宣布,如果语句外变量context_dict和工程:) – Anita 2014-12-14 13:18:53

+0

错误是故意的。你需要决定你如何处理这个问题,并在错误没有发生的情况下删除错误。 – 2014-12-14 13:21:07

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) 
相关问题