UnboundLocalError - 赋值前引用的局部变量'app'

UnboundLocalError-local variable 'app' referenced before assignment

这是我的 appname.urls 代码 [应用名称:atolye(这是一个土耳其语单词)]

从django.conf.urls导入url 从 .views 导入 * url模式=[

url(r'^index/$', atolye_index),
url(r'^(?P<id>\d+)/$', atolye_detail), 

] 这是我的 atolye.views

从 django.shortcuts 导入渲染,get_object_or_404 来自 .models 导入车间

def atolye_index(请求): atolyes=atolye.objects.all() return 渲染(请求,'atolye_index.html',{'atolyes':atolyes})

def atolye_detail(请求, id): 工作室 = get_object_or_404(atolye, id=id) 上下文 = { 'atolye': 车间, } return 渲染(请求,'atolye_detail.html',上下文) 我想使用此代码,但它不起作用。我该怎么办?

python: 3.5.3 django: 1.10 win7 我是新用户。抱歉我的英语不好。

我在这里有点猜测,因为你的异常回溯与你的标题或描述都不匹配,而且你的代码不可读,但是…

from .models import atolye

# …

def atolye_detail(request, id):
    atolye = get_object_or_404(atolye, id=id) 

这最后一行可能是例外的那一行,未绑定的本地可能不是 app 或您提到的另一行而是 atolye,对吗?

问题在于,如果您在函数中的任何位置分配一个名称,该名称在该函数中始终是局部变量。

所以,因为这里有 atolye =,所以 atolye 是一个局部变量。即使在 get_object_or_404(atolye, id=id)。而且,由于该调用发生在您将任何内容分配给 atolye 之前,局部变量没有值。


我不确定你想在这里做什么,但有两种可能性。

如果您不是要替换 atolye 的全局值,只需使用不同的名称:

def atolye_detail(request, id):
    my_atolye = get_object_or_404(atolye, id=id) 
    context = { 'atolye': my_atolye, }
    return render(request, 'atolye_detail.html', context)

如果您试图替换atolye的全局值,您需要一个global声明者:

def atolye_detail(request, id):
    global atolye
    atolye = get_object_or_404(atolye, id=id) 
    context = { 'atolye': atolye, }
    return render(request, 'atolye_detail.html', context)