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

时间:2018-07-12 21:20:49

标签: python django django-1.10

bu benim appname.urlskodlarım[appname:atolye(bu birTürkkelimesi)]

从django.conf.urls

导入URL 从.views导入* urlpatterns = [

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

] ve bu benim atolye.views

从django.shortcuts

导入渲染get_object_or_404 从.models导入atolye

def atolye_index(request):     atolyes = atolye.objects.all()     返回render(request,'atolye_index.html',{'atolyes':atolyes})

def atolye_detail(请求,ID):     atolye = get_object_or_404(atolye,id = id)     上下文= {         'atolye':atolye,     }     返回render(request,'atolye_detail.html',上下文) Bu kodu kullanmak istiyorum amaişeyaramıyor。 Neyapmalıyım?

python:3.5.3 django:1.10 win7 Yeni birkullanıcıyım。 Kötüingilizcemiçinözürdilerim。

1 个答案:

答案 0 :(得分:0)

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

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)