2012-12-17 2 views
0

Почему в коде ниже, это глобальный direktorie возвращает правильные данные в шаблоне login() отладки, но когда я пытаюсь получить доступ к одной переменной из autoname() он говорит список имеет длину 0? Я не ссылаюсь на direktorie в любых других местах в views.py - или где-нибудь еще в этом отношении. (Весь приведенный ниже код - это просто попытка обнаружить, что я делаю неправильно. Меня не волнует длина возвращаемого списка. Я просто хочу знать, что это видно и имеет примерно правильное количество записей.)Джанго: результаты поиска LDAP исчезают

from django.http   import HttpResponse, HttpResponseRedirect, Http404 
from django.shortcuts  import render_to_response, get_object_or_404 
import json      # JSON for jQuery AJAX autocomplete 
from eldappery import *  # LDAP for jQuery AJAX autocomplete 

direktorie = [] 

############################################################################## 

def login(request): 
    """LDAP Login routine""" 
    global direktorie 

    if request.method == "POST":     # If submitted... 
    if request.POST["username"] and request.POST["password"]: 
     username = request.POST["username"] 
     password = request.POST["password"] 
     LDAPfeed = dapperize(username, password) # ...login 
     if LDAPfeed: 
     direktorie = fetch_names(LDAPfeed,"") # ...get everybody 
     ls = locals()       # DEBUG! 
     gs = globals()       # DEBUG! 
     return render_to_response("debug.html", 
            {"ls": ls, 
            "gs": gs}) # DEBUG! Works! (direktorie full) 
     else: 
     return HttpResponseRedirect("/login/") 
    return render_to_response("login.html", 
          context_instance=RequestContext(request)) 

############################################################################## 

def autoname(request): 
    """Auto-complete names""" 
    global direktorie 
    if request.is_ajax(): 
# results = [{"id": 5, 
#    "label": 5, 
#    "value": 5}]    # DEBUG! Works! (5 in template) 
    results = [{"id": len(direktorie), 
       "label": len(direktorie), 
       "value": len(direktorie)}] # DEBUG! Doesn't work! (0 in template) 
    data = json.dumps(results)    # Convert to JSON string 
    else:          # No results returned! 
    data = "fail"       # Error... 
    mimetype = "application/json"    # MIME type = JSON 
    return HttpResponse(data, mimetype)  # Send JSON back to web page 

############################################################################## 
+0

Я понятия не имею, что из 'eldappery import *' делает. FWIW, ["Хотя это верно для использования с модуля модульного импорта * на уровне модуля, это обычно плохая идея"] (http://docs.python.org/2/howto/doanddont.html#at-module- уровень) –

ответ

0

Сыпучие линия -

global direktorie 

Вам не нужно объявлять переменную direktorie как глобальный, так как вы не присваивание значения к нему. Python будет считать, что любая переменная в правой части присваивания является глобальной (если только она не указана в левой части задания, в другом месте функции).

Также вы можете проверить, что ваш веб-сервер работает с вашим приложением, используя один процесс. Если он установлен для нескольких процессов, например, с помощью директивы конфигурации апача как -

WSGIDaemonProcess yoursite.com processes=2 threads=15 

тогда вы собираетесь ударить проблемы с глобальными директивами.

0

Обращение к представлению django, не позволяет передавать глобальные переменные между представлениями. Если вы хотите передать данные между представлениями, вам нужно использовать ajax, чтобы отправить данные в запросы на получение или отправку.

def index(request): 
    print 'helou' 
    return render_to_response('index.html', {'lala': 'lala'}) 

    #index.html 
    # <script type='text/javascript'> 
    # obj = {type:'get', url='/test/view0', data: {tamangandapio:'yeah'}, type='json', 
    #   response: function(){ console.log(response) } 
    #   } 
    # $.ajax(obj); 
    # </script> 

def view0(request) 
    #here you see the data send by the jquery code below 
    print request.GET 
    res = {'success':'i got it'} 
    return HttpResponse(simplejson.dumps(res), mimetype='application/javascript') 
Смежные вопросы