dictionnaire de séquence de mise à jour de l'élément de #0 a longueur 15; 2 est requis
Je me suis mise à niveau de mon python/django application de 1.6.5 à 1,7. Je vais avoir de la difficulté à résoudre le message d'erreur suivant: dictionnaire de séquence de mise à jour de l'élément de #0 a longueur 15; 2 est requis
Ici est le traceback de sortie:
Request Method: GET
Request URL: http://127.0.0.1:8000/dashboard/
Django Version: 1.7
Python Version: 2.7.5
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'django.contrib.humanize',
'bootstrap3',
'ajax_select',
'appconf',
'versiontools',
'compressor',
'googlecharts',
'django_extensions',
'mandala',
'locations',
'statistics',
'alarms',
'accounts',
'assets')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/Users/CLDSupportSystems/mandala-system/mandala_env_django_1.7/lib/python2.7/sit-packages/django/core/handlers/base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/CLDSupportSystems/mandala-system/mandala_env_django_1.7/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
22. return view_func(request, *args, **kwargs)
File "/Users/CLDSupportSystems/mandala-system/mandala_env_django_1.7/mandala/mandala/views.py" in dashboard
117. return render_to_response('dashboard/dashboard.html', variables,context_instance=RequestContext(request))
File "/Users/CLDSupportSystems/mandala-system/mandala_env_django_1.7/lib/python2.7/site-packages/django/shortcuts.py" in render_to_response
23. return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/Users/CLDSupportSystems/mandala-system/mandala_env_django_1.7/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
177. with context_instance.push(dictionary):
File "/Users/CLDSupportSystems/mandala-system/mandala_env_django_1.7/lib/python2.7/site-packages/django/template/context.py" in push
54. return ContextDict(self, *args, **kwargs)
File "/Users/CLDSupportSystems/mandala-system/mandala_env_django_1.7/lib/python2.7/site-packages/django/template/context.py" in __init__
19. super(ContextDict, self).__init__(*args, **kwargs)
Exception Type: ValueError at /dashboard/
Exception Value: dictionary update sequence element #0 has length 15; 2 is required
L'erreur est renvoyée à la ligne suivante:
return render_to_response('dashboard/dashboard.html', variables,context_instance=RequestContext(request))
Voici la définition de variables:
variables = RequestContext(request, {
'fresh_locations': fresh_data_locations,
'webalert_locations': webalert_locations,
'locations_reporting': reporting_locations,
'locations_not_reporting': locations_not_reporting,
'inalarm_count': inalarm_count,
'inalarm_stores': inalarm_stores_qs,
'workspace_count': workspace_count,
'user_profile': user_profile,
})
Quelqu'un peut me pointer dans la bonne direction?
Je soupçonne fortement que
variables
devrait être une simple dictionnaire, pas un RequestContext
ici.
OriginalL'auteur Brandon | 2014-10-16
Vous devez vous connecter pour publier un commentaire.
Le deuxième argument de
render_to_response()
doit être un dictionnaire. Vous êtes de passage dans unRequestContext()
à la place.Supprimer la
RequestContext()
objet et fairevariables
juste un dictionnaire:Je soupçonne que c'était une coïncidence qu'il n'a jamais fonctionné; la documentation indique clairement un dictionnaire est prévu.
Alright. Merci beaucoup. Si simple et je l'ai raté. Très apprécié.
OriginalL'auteur Martijn Pieters
C'est parce que le render_to_response() et aussi render() raccourcis appliquera automatiquement RequestContext sur les variables de contexte (les variables dir). Ses une faute de frappe pour sûr, mais pourquoi avait-il travailler avant que demandez-vous?
Il aurait travaillé jusqu'à 1,6, mais la mise en œuvre RequestContext dans django.de modèle.le contexte a changé en 1.7. Il a été détruit pour être plus orienté objet et optimisé pour le rendre plus efficace. L'histoire est ici, je pense que c'était
https://github.com/django/django/commits/master/django/template/context.py
Ce commit en particulier optimisé RequestContext:
https://github.com/django/django/commit/8d473b2c54035cbcd3aacef0cb83a9769cd05ad3
Ici est de savoir comment re-produire l'erreur:
Donc avec django 1.6 fonction dir() retourné sans erreur, mais avec la 1.7 mise en œuvre, il échoue. Juste une de ces choses qui ont travaillé en on peut presque dire qu'un hasard avant 1.7.
Lors de l'utilisation de la classe en fonction des vues à partir de django.les vues.générique, beaucoup de ce genre de choses est juste fait pour vous. Si vous regardez TemplateView, vous verrez qu'il hérite render_to_response méthode de TemplateResponseMixin qui utilise TemplateResponse qui fait tout ce genre de choses. Consultez également ContextMixin, qui a la get_context_data méthode. La façon la plus propre je pense que pour transmettre des données de contexte pour le modèle. Plus sur générique /classe des vues basées sur les ici.
OriginalL'auteur radtek