Je crée une application Web en utilisant Django 1.11, Apache 2.2 et mod_wsgi en utilisant Python 2.7. J'ai un problème de rendu de ma page. Le retraçage complet est,Exception Valeur: le contexte doit être dicté plutôt que WSGIRequest
Environment:
Request Method: GET
Request URL: http://website.com/~user/irtf/
Django Version: 1.11.1
Python Version: 2.7.13
Installed Applications:
['irtf.apps.IrtfConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mod_wsgi.server']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'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 "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/path/irtf_website/mysite/irtf/views.py" in index
18. return HttpResponse(template.render(request))
File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/template/backends/django.py" in render
64. context = make_context(context, request, autoescape=self.backend.engine.autoescape)
File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/template/context.py" in make_context
287. raise TypeError('context must be a dict rather than %s.' % context.__class__.__name__)
Exception Type: TypeError at /irtf/
Exception Value: context must be a dict rather than WSGIRequest.
Mon views.py est,
def index(request):
template = loader.get_template('irtf/index.html')
return HttpResponse(template.render(request))
Il pourrait ne pas d'importance, mais mon modèle pour cette page se compose simplement du texte et des liens.
Merci. Je suis confus parce que dans la page tutoriel sur les vues (https://docs.djangoproject.com/en/1.11/intro/tutorial03/) HttpResponse est utilisé sans dicts se faire passer. La documentation est-elle incorrecte ou y a-t-il une différence que je ne vois pas? – Alexa
Là c'est le raccourci de rendu qui est utilisé sans dictionnaire. Dans certains endroits, ils ont utilisé le raccourci 'render' dans un autre' template.render' ils ont l'air similaires mais ont un comportement différent. Le tutoriel n'est pas faux mais cela peut être déroutant. – e4c5
Ce n'est pas HttpResponse qui lance l'erreur ici, c'est la méthode Template.render qui lance l'exception. La signature de méthode pour [Template.render] (https://github.com/django/django/blob/master/django/template/backends/django.py#L58) nécessite soit le contexte et la requête à spécifier en tant qu'arguments de mot-clé, c'est-à-dire 'template.render (requête = requête, contexte = contexte)' ou la requête et le contexte doivent être fournis en tant qu'arguments positionnels, c'est-à-dire 'template.render (None, request)'. Une fois l'appel à rendre est fixé, il retournera une chaîne qui est un premier argument valide à HttpResponse. – ARJMP