0

为什么在下面的代码中,全局direktorie是否在调试模板中返回正确的数据login(),但是当我尝试从中访问相同的变量autoname()时说列表的长度为0?我不会direktorie在任何其他地方views.py——或其他任何地方提及此事。(下面的所有代码只是试图发现我做错了什么。我并不真正关心返回列表的长度。我只想知道它被看到并且具有大致正确数量的条目。 )

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

##############################################################################
4

2 回答 2

0

django 的视图设计,不允许你在视图之间传递全局变量。如果要在视图之间传递数据,则需要使用 ajax,在 get 或 post 请求中发送数据。

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')
于 2012-12-17T19:27:56.890 回答
0

松开线——

global direktorie

您不需要将变量声明direktorie为全局变量,因为您没有为其分配值。Python 将假定赋值右侧的任何变量都是全局变量(除非它出现在赋值的左侧,在函数的其他位置)。

此外,您可能需要检查您的网络服务器是否正在使用单个进程运行您的应用程序。如果它是为多个进程设置的,例如使用 apache 配置指令,例如 -

WSGIDaemonProcess yoursite.com processes=2 threads=15

那么你会遇到全局指令的问题。

于 2012-12-17T18:44:47.213 回答