Python 局部变量';上下文规则';分配前参考

Python 局部变量';上下文规则';分配前参考,python,django-views,Python,Django Views,有人能解释一下这个错误是什么意思吗?什么是作业?上下文应该在哪里?还是我犯了其他错误?我是Django的新手。非常感谢你 def add_page(request, category_name_slug): try: cat = Category.objects.get(slug=category_name_slug) except Category.DoesNotExist: cat = None if request.method =

有人能解释一下这个错误是什么意思吗?什么是作业?上下文应该在哪里?还是我犯了其他错误?我是Django的新手。非常感谢你

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
例外的是,在返回render(reqyest,'rango/add_page.html',context_dict)的行中指向我


相同的回溯

请尝试此代码,仅回复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')

记住,在Python中,缩进很重要。问题在于变量
context\u dict
在if语句之外没有引用,因为它是如何缩进的。因此,在if语句之外声明变量
context\u dict

    context_dict = {}
    if request.method == 'POST':
    <rest of code here>
context_dict={}
如果request.method==“POST”:

我再次对我的代码进行了分解,这种方法很有效。我的context_dict现在位于if-outer语句之外,而else:form=PageForm()现在位于outer-if语句中,与以前在internal-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)

如果请求方法不是
'POST'
您不定义
context\u dict
,但您尝试在最后一行中使用它。这样我得到了错误:不是POST请求,但我实际上在If语句之外声明了变量context\u dict,并且它可以工作:)错误是故意的。您需要决定如何处理该错误,并在错误不是错误的情况下删除该错误。