2015-03-02 5 views
1

Я изменил следующий метод на моей машине развития, и это работает прекрасно там: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 (которые используют разные базы данных).

Поскольку поисковые запросы должны быть сохранены в сеансе, я подозреваю, что это имеет какое-то отношение к сеансовой передаче в производство, но я не знаю, как это сделать.

Точка, которая может быть актуальна. Хотя я установил панель отладки на моей производственной машине, я не вижу ее вкладку даже в режиме отладки.

Я ценю ваши намеки, чтобы исправить это.

+0

Существует путь выполнения, в котором переменная профиля не определена. форма действительна, а f - None. – eugene

+0

@eugene не уверен, как это имеет отношение к разному поведению между разработчиком и производством. – supermario

+0

, например, ваш 'qs' пуст в prod не в dev. – eugene

ответ

2

Ваша проблема в переменной profiles, которая не определена в процессе производства.

Существует путь кода, который не определяет вашу переменную profiles.

При взгляде ближе вы должны быть в состоянии, почему это происходит.

Ваш qs может быть пустым. Ваше предположение, что request.method должно быть get or post может быть неправильным. (клиент может отправить исправление, удалить запрос). Могло быть больше причин ...

В любом случае ваш код имеет отверстия, которые не определяют переменную profiles, а ваш производственный сервер (или клиент, использующий сервер) отличается в том смысле, что он проходит через другой путь выполнения.

Вы можете поставить import pdb; pdb.set_trace() и отладить его. или мысленно проанализируйте свой код, чтобы исправить его.

0

Помещенные или скопируйте

Paginator = Paginator (профили, 12)

под

профили = UserProfile.objects.filter (е) .order_by ('- created_at')

с тем же отступом. Я думаю, что значение f не является ничем и основано на выведенном коде, ваша разбивка на страницы находится вне профиля_search(), поэтому я думаю, что назначение профилей не удалось.

Смежные вопросы