关于python:在赋值之前引用的UnboundLocalError-局部变量’app’

UnboundLocalError-local variable 'app' referenced before assignment

bu-benim-appname.urls-kodlar?M[AppName:Atolye(bu bir t_rk Kelimesi)]

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

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

]ve bu benim atolye.视图

从django.shortcuts导入render,获取u object_或u 404从.模型导入Atolye

def atolye_索引(请求):atolyes=atolye.objects.all()。返回render(请求,'atolye_index.html','atolyes':atolyes)

def atolye_详细信息(请求,ID):atolye=get_object_或_404(atolye,id=id)上下文={"Atolye":Atolye,}返回render(请求,"atolye_detail.html",上下文)我是库兰马?雅拉姆?好的。尼亚帕马尔?Y?M?

python:3.5.3 django:1.10 win7 yeni bir kullan?C?Y?K?我是不是在骗你?在?Z_r Dilerim。


我在这里做了一些猜测,因为您的异常跟踪与您的标题或描述不匹配,并且您的代码不可读,但是…

1
2
3
4
5
6
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的全局值,只需使用一个不同的名称:

1
2
3
4
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州人:

1
2
3
4
5
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)