2010-03-04 2 views
0

Nouveau sur App Engine et django. Je pense que c'est un problème avec mon installation de django, qui est 1.1.1, mais j'ai aussi lu que je peux juste utiliser le django empaqueté avec le SDK du moteur de l'application.Django/App Engine/Python 2.5: __new__ défaut ne prend aucun paramètre

Toute aide sur la raison pour laquelle je reçois cette erreur quand je tester localement serait grandement apprécié.

Le rappel:

Variable Value 
callback 
<class 'ourlat.main.views.SettingsPage'> 
callback_args 
() 
callback_kwargs 
{} 
e 
TypeError('default __new__ takes no parameters',) 
exc_info 
(<type 'exceptions.TypeError'>, TypeError('default __new__ takes no parameters',), <traceback object at 0x02201B48>) 
exceptions 
<module 'django.core.exceptions' from 'C:\Documents and Settings\Jeremy Gordon\eclipse-workspace\ourlat\django\core\exceptions.pyc'> 
middleware_method 
<bound method CommonMiddleware.process_request of <django.middleware.common.CommonMiddleware object at 0x021F5170>> 
receivers 
[(<function _rollback_on_exception at 0x02063730>, None)] 
request 
<WSGIRequest GET:<QueryDict: {}>, POST:<QueryDict: {}>, COOKIES:{}, META:{'APPLICATION_ID': 'ourlat', 'AUTH_DOMAIN': 'gmail.com', 'CONTENT_LENGTH': '', 'CONTENT_TYPE': 'application/x-www-form-urlencoded', 'CURRENT_VERSION_ID': '1.1', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8', 'HTTP_CACHE_CONTROL': 'max-age=0', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_HOST': 'localhost:8080', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.1 (KHTML, like Gecko) Chrome/5.0.335.1 Safari/533.1', 'PATH_INFO': u'/', 'PATH_TRANSLATED': 'C:\\Documents and Settings\\Jeremy Gordon\\eclipse-workspace\\ourlat\\main.py', 'QUERY_STRING': '', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_METHOD': 'GET', 'SCRIPT_NAME': u'', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8080', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': 'Development/1.0', 'TZ': 'UTC', 'USER_EMAIL': '', 'USER_ID': '', 'USER_ORGANIZATION': '', 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x00B1F0B0>, 'wsgi.input': <cStringIO.StringI object at 0x022A0260>, 'wsgi.multiprocess': False, 'wsgi.multithread': False, 'wsgi.run_once': True, 'wsgi.url_scheme': 'http', 'wsgi.version': (1, 0)}> 
resolver 
<RegexURLResolver urls (None:None) ^/> 
response 
None 
self 
<django.core.handlers.wsgi.WSGIHandler object at 0x021F5790> 
settings 
<django.conf.LazySettings object at 0x01E997B0> 
urlconf 
'urls' 
urlresolvers 
<module 'django.core.urlresolvers' from 'C:\Documents and Settings\Jeremy Gordon\eclipse-workspace\ourlat\django\core\urlresolvers.pyc'> 

L'erreur:

TypeError at/
default __new__ takes no parameters 
Request Method: GET 
Request URL: http://localhost:8080/ 
Exception Type: TypeError 
Exception Value: 
default __new__ takes no parameters 
Exception Location: C:\Documents and Settings\Jeremy Gordon\eclipse-workspace\ourlat\django\core\handlers\base.py in get_response, line 92 
Python Executable: C:\Python25\python.exe 
Python Version: 2.5.0 
Python Path: ['C:\\Documents and Settings\\Jeremy Gordon\\eclipse-workspace\\ourlat', 'C:\\Program Files\\Google\\google_appengine', 'C:\\Program Files\\Google\\google_appengine\\lib\\antlr3', 'C:\\Program Files\\Google\\google_appengine\\lib\\django', 'C:\\Program Files\\Google\\google_appengine\\lib\\ipaddr', 'C:\\Program Files\\Google\\google_appengine\\lib\\webob', 'C:\\Program Files\\Google\\google_appengine\\lib\\yaml\\lib', 'C:\\Program Files\\Google\\google_appengine', 'C:\\Python25\\lib\\site-packages\\beautifulsoup-3.1.0.1-py2.5.egg', 'C:\\Python25\\lib\\site-packages\\django-1.1.1-py2.5.egg', 'C:\\Documents and Settings\\Jeremy Gordon\\eclipse-workspace\\ourlat\\ourlat', 'C:\\Program Files\\Google\\google_appengine', 'C:\\Program Files\\Google\\google_appengine\\lib\\webob', 'C:\\Program Files\\Google\\google_appengine\\lib\\yaml', 'C:\\Program Files\\Google\\google_appengine\\lib', 'C:\\Program Files\\Google\\google_appengine\\lib\\simplejson-2.0.9', 'C:\\Program Files\\Google\\google_appengine\\lib\\geopy', 'C:\\Program Files\\Google\\google_appengine\\lib\\BeautifulSoup-3.0.8', 'C:\\Documents and Settings\\Jeremy Gordon\\eclipse-workspace\\ourlat\\django', 'C:\\Python25', 'C:\\Python25\\DLLs', 'C:\\Python25\\lib', 'C:\\Python25\\lib\\lib-tk', 'C:\\Python25\\lib\\plat-win', 'C:\\Python25\\lib\\site-packages', 'C:\\Python25\\lib\\site-packages\\setuptools-0.6c7-py2.5.egg', 'C:\\Python25\\lib\\site-packages\\simplejson-2.0.9-py2.5.egg', 'C:\\Python25\\Lib\\site-packages\\geopy-0.93dev_r0-py2.5.egg', 'C:\\WINDOWS\\system32\\python25.zip'] 
Server time: Sat, 6 Mar 2010 01:18:27 +0000 

source

page Paramètres
class SettingsPage(webapp.RequestHandler): 
    def get(self): 
     if users.get_current_user(): 
      url = users.create_logout_url(self.request.uri) 
      url_linktext = 'Logout' 
      account_query = OLAccount.all().filter('owner =',users.get_current_user()) 
      if account_query.count() < 1: 
       thisuser = OLAccount(owner = users.get_current_user()) 
       thisuser.put() 
      else: 
       thisuser = account_query.fetch(1)[0] 

      tracks = [db.get(key) for key in thisuser.track_keys] 
      template_values = { 
       'url': url, 
       'url_linktext': url_linktext, 
       'thisuser': thisuser, 
       'tracks': tracks 
       } 

      path = os.path.join(os.path.dirname(__file__), 'html/settings.html') 
      self.response.out.write(template.render(path, template_values)) 
     else: 
      self.redirect(users.create_login_url(self.request.uri)) 
+0

Veuillez mettre en retrait correctement. Si vous lisez le côté droit de la page, il indique que le code est indenté de 4 espaces. Si vous regardez la zone de texte, il a un bouton avec une image "101010", qui le fera pour vous. Veuillez corriger votre question pour utiliser l'indentation d'espace et inclure suffisamment de code pour pouvoir interpréter le message d'erreur. –

Répondre

2

Vous semblez ha J'ai sous-classé (au moins une fois) une classe de vue de Django avec un __init__ (mais pas un __new__) avec une signature non-standard. Si vous cliquez sur le triangle vers le début de ce message (dans votre propre environnement - le clic ne fonctionne pas sur ce msg copier/coller dans SO, bien sûr ;-) vous devriez voir les variables locales, y compris par exemple le callback qui est le point de vue que vous essayez d'appeler (vient de votre résolveur URL, voir the source à la ligne 68) - cette information vous aidera davantage le débogage.

Modifier: ressemble le problème est que vous mélanger et assortir les urlresolvers de Django (qui attendent appelables Django-id, prenant la demande comme argument) avec une sous-classe de Google webapp.RequestHandler (qui ne prend pas d'arguments en __init__): ne faites pas ça. Utilisez app.yaml pour choisir ce scénario .py gère les requêtes à chaque groupe de chemins dans votre application, et dans chaque utilisation du script .py que Django ou seulement webapp - pas de mélange.

BTW, Django qui vient avec le kit de développement de moteur d'application est de 0,96, comme par défaut sur les serveurs de Google; mais sur les serveurs de Google, vous pouvez facilement passer à plus de versions modernes django avec use_library, tandis que sur votre SDK vous ne pouvez pas - c'est pas sans installer votre propre django localement & c. Voir la page que je viens de vous montrer et liens.

+0

Ajout de la traceback et de la source de settingspage, qui semble impliquée. Appréciez votre temps en regardant cela, je suppose que c'est une erreur d'un débutant de quelque sorte, c'est la première fois que je tente de mettre en place un projet django/GAE. –

+0

Ah oui, on dirait que j'ai mélangé et assorti des solutions de deux endroits différents. Toujours comprendre les différences entre l'utilisation de modèles django et des modèles webapp. Merci beaucoup! Vraiment apprécier la poussée dans la bonne direction. –

+0

@Jeremy, merci sont gentils, accepter les réponses est mieux (utilisez l'icône en forme de coche à côté du nombre de upvotes pour la réponse que vous voulez accepter, par exemple le grand 0 dans ce cas ;-). Accepter une réponse vous donne également 2 points de réputation, vous élançant vers le seuil magique de 15 où vous pouvez également "upvote" réponses (à la fois à vos propres questions, et d'autres) - lire sur les mécanismes fondamentaux de StackOverflow à http: //stackoverflow.com/faq. –

Questions connexes