2017-05-23 8 views
2

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.

Répondre

10

Qui est parce que le premier parameter est censé être un dictionnaire. Vous aviez peut-être mélangé cela avec le rendu raccourci

template = loader.get_template('irtf/index.html') 
return HttpResponse(template.render({}, request)) 

Pour utiliser le render shortcut à la place

return render(request,'irtf/index.html') 
+0

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

+0

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

+0

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