部署时 Django 查看错误
Django views error when deployed
我已经在我的开发机器上修改了以下方法并且在那里工作得很好:
def profile_search(request):
args = {}
qs=[]
if request.method == 'GET':
page = request.GET.get('page')
print 'page is:' + str(page)
if 'search-profiles-post' in request.session:
request.POST = QueryDict('').copy()
request.POST.update(request.session['search-profiles-post'])
request.method = 'POST'
if request.method == "POST":
form = AdvancedSearchForm(request.POST)
request.session['search-profiles-post'] = request.POST
if form.is_valid():
cd = form.cleaned_data
s_country=cd['country']
s_province=cd['province']
s_city = cd['city']
if s_country: qs.append(Q(country__icontains = s_country))
if s_province: qs.append( Q(province__icontains=s_province))
if s_city: qs.append( Q(city__icontains=s_city))
f = None
for q in qs:
if f is None:
f=q
else: f &=q
print f
if f is not None:
profiles = UserProfile.objects.filter(f).order_by('-created_at')
else:
form = AdvancedSearchForm()
profiles = UserProfile.objects.all().order_by('-created_at')
paginator = Paginator(profiles,12) # << This line is problematic
page= request.GET.get('page')
try:
results = paginator.page(page)
except PageNotAnInteger:
results = paginator.page(1)
except EmptyPage:
results = paginator.page(paginator.num_pages)
args.update(csrf(request))
args['form'] = form
args['results'] = results
return render_to_response('userprofile/advanced_search.html', args,
context_instance=RequestContext(request))
然而,当我将视图复制到我的产品中时(修改前工作正常),我收到此错误:
UnboundLocalError at /search/
local variable 'profiles' referenced before assignment
回溯:
File "/root/.djenv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "./userprofile/views.py" in profile_search
739. paginator = Paginator(profiles,12)
Exception Type: UnboundLocalError at /search/
Exception Value: local variable 'profiles' referenced before assignment
据我所知,我的生产和开发之间唯一不同的代码是 settings.py(它们使用不同的数据库)。
由于搜索查询要保存到会话中,我怀疑它与生产中的会话处理有关,但我不知道如何。
可能相关的一点:虽然我在我的生产机器上安装了调试工具栏,但即使在调试模式下我也看不到它的选项卡。
非常感谢您提出解决此问题的提示。
您的问题是 profiles
变量未在生产中定义。
有一个代码路径没有定义您的 profiles
变量。
仔细观察,您应该能够理解为什么会这样。
您的 qs
可能是空的,您认为 request.method
必须是 get or post
的假设可能是错误的。 (客户端可能会发送补丁、删除请求)。可能还有更多原因...
在任何情况下,您的代码都有未定义 profiles
变量的漏洞,并且您的生产服务器(或使用服务器的客户端)在某种意义上是不同的,因为它正在经历不同的执行路径.
你可以放一个 import pdb; pdb.set_trace()
并调试它。
或在心理上分析您的代码以修复它。
放置或复制
分页器 = 分页器(配置文件,12)
低于
配置文件 = UserProfile.objects.filter(f).order_by('-created_at')
具有相同的缩进。我认为 f 的值不是 None,并且基于显示的代码,您的分页在 profile_search() 之外,所以我认为 profilles 的分配失败。
我已经在我的开发机器上修改了以下方法并且在那里工作得很好:
def profile_search(request):
args = {}
qs=[]
if request.method == 'GET':
page = request.GET.get('page')
print 'page is:' + str(page)
if 'search-profiles-post' in request.session:
request.POST = QueryDict('').copy()
request.POST.update(request.session['search-profiles-post'])
request.method = 'POST'
if request.method == "POST":
form = AdvancedSearchForm(request.POST)
request.session['search-profiles-post'] = request.POST
if form.is_valid():
cd = form.cleaned_data
s_country=cd['country']
s_province=cd['province']
s_city = cd['city']
if s_country: qs.append(Q(country__icontains = s_country))
if s_province: qs.append( Q(province__icontains=s_province))
if s_city: qs.append( Q(city__icontains=s_city))
f = None
for q in qs:
if f is None:
f=q
else: f &=q
print f
if f is not None:
profiles = UserProfile.objects.filter(f).order_by('-created_at')
else:
form = AdvancedSearchForm()
profiles = UserProfile.objects.all().order_by('-created_at')
paginator = Paginator(profiles,12) # << This line is problematic
page= request.GET.get('page')
try:
results = paginator.page(page)
except PageNotAnInteger:
results = paginator.page(1)
except EmptyPage:
results = paginator.page(paginator.num_pages)
args.update(csrf(request))
args['form'] = form
args['results'] = results
return render_to_response('userprofile/advanced_search.html', args,
context_instance=RequestContext(request))
然而,当我将视图复制到我的产品中时(修改前工作正常),我收到此错误:
UnboundLocalError at /search/
local variable 'profiles' referenced before assignment
回溯:
File "/root/.djenv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "./userprofile/views.py" in profile_search
739. paginator = Paginator(profiles,12)
Exception Type: UnboundLocalError at /search/
Exception Value: local variable 'profiles' referenced before assignment
据我所知,我的生产和开发之间唯一不同的代码是 settings.py(它们使用不同的数据库)。
由于搜索查询要保存到会话中,我怀疑它与生产中的会话处理有关,但我不知道如何。
可能相关的一点:虽然我在我的生产机器上安装了调试工具栏,但即使在调试模式下我也看不到它的选项卡。
非常感谢您提出解决此问题的提示。
您的问题是 profiles
变量未在生产中定义。
有一个代码路径没有定义您的 profiles
变量。
仔细观察,您应该能够理解为什么会这样。
您的 qs
可能是空的,您认为 request.method
必须是 get or post
的假设可能是错误的。 (客户端可能会发送补丁、删除请求)。可能还有更多原因...
在任何情况下,您的代码都有未定义 profiles
变量的漏洞,并且您的生产服务器(或使用服务器的客户端)在某种意义上是不同的,因为它正在经历不同的执行路径.
你可以放一个 import pdb; pdb.set_trace()
并调试它。
或在心理上分析您的代码以修复它。
放置或复制
分页器 = 分页器(配置文件,12)
低于
配置文件 = UserProfile.objects.filter(f).order_by('-created_at')
具有相同的缩进。我认为 f 的值不是 None,并且基于显示的代码,您的分页在 profile_search() 之外,所以我认为 profilles 的分配失败。