Я изменил следующий метод на моей машине развития, и это работает прекрасно там:Django рассматривает ошибки при развертывании
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))
Однако, когда я копирую взгляды в мою продукцию (которая работала нормально до изменения) I получить эту ошибку:
UnboundLocalError at /search/
local variable 'profiles' referenced before assignment
Traceback:
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 (которые используют разные базы данных).
Поскольку поисковые запросы должны быть сохранены в сеансе, я подозреваю, что это имеет какое-то отношение к сеансовой передаче в производство, но я не знаю, как это сделать.
Точка, которая может быть актуальна. Хотя я установил панель отладки на моей производственной машине, я не вижу ее вкладку даже в режиме отладки.
Я ценю ваши намеки, чтобы исправить это.
Существует путь выполнения, в котором переменная профиля не определена. форма действительна, а f - None. – eugene
@eugene не уверен, как это имеет отношение к разному поведению между разработчиком и производством. – supermario
, например, ваш 'qs' пуст в prod не в dev. – eugene