73 votes

Erreur Django : render_to_response() got an unexpected keyword argument 'context_instance'.

Après la mise à jour vers Django 1.10, j'obtiens l'erreur suivante render_to_response() got an unexpected keyword argument 'context_instance' .

Mon point de vue est le suivant :

from django.shortcuts import render_to_response
from django.template import RequestContext

def my_view(request):
    context = {'foo': 'bar'}
    return render_to_response('my_template.html', context, context_instance=RequestContext(request))

Voici l'historique complet :

Traceback:

File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
  39.             response = get_response(request)

File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/Users/alasdair/.virtualenvs/django110/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Users/alasdair/dev/rtr/rtr/urls.py" in my_view
  26.     return render_to_response('my_template.html', context,  context_instance=RequestContext(request))

 Exception Type: TypeError at /
Exception Value: render_to_response() got an unexpected keyword argument 'context_instance'

141voto

Alasdair Points 36535

El context_instance dans render_to_response était déprécié dans Django 1.8 et supprimé dans Django 1.10.

La solution consiste à passer à la render qui utilise automatiquement un RequestContext .

Mettez à jour vos importations et votre vue comme suit. Notez que render prend le request comme premier argument.

from django.shortcuts import render

def my_view(request):
    context = {'foo': 'bar'}
    return render(request, 'my_template.html', context)

El render a été introduit dans Django 1.3, ce changement est donc compatible avec les anciennes versions de Django.

2voto

Dantez Layton Points 29

Dans Django 1.8 est compatible :

from django.shortcuts import render_to_response
from django.template import RequestContext

def my_view(request):
    context = {'foo': 'bar'}
    return render_to_response('my_template.html', {'context':context}, context_instance=RequestContext(request))

dans Django 1.11

from django.shortcuts import render
from django.template import RequestContext

def my_view(request):
    context = {'foo': 'bar'}
    return render(request, 'my_template.html', context)

0 votes

Vous n'avez pas besoin d'utiliser render_to_response dans Django 1.8. Comme je le dis dans ma réponse, le render fonctionne dans Django 1.3+.

0 votes

Dans django 1.8 est également compatible avec : render_to_response, vérifié pour moi dans un virtualenv. Néanmoins dans les dernières versions de django est avec render.

0 votes

Oui, render_to_response fonctionne en 1.8, mais il n'y a pas de bonne raison de l'utiliser - render est plus simple.

0voto

VIctor Angelov Points 31

Django 2.0.7 python 3.5

dans projet/urls.py

handler404 = 'project.views.not_found'
handler500 = 'project.views.server_error'

dans projet/views.py

def not_found(request, exception=None):
response = render(request, '404.html', {})
response.status_code = 404
return response

def server_error(request, exception=None):
response = render(request, '500.html', {})
response.status_code = 500
return response

exception=None est passé parce que sinon il jette TypeError : server_error() manque 1 argument positionnel requis : 'exception'.

1 votes

Je ne suis pas sûr de la raison pour laquelle vous avez ajouté cette réponse à cette question, car elle ne semble pas avoir de rapport avec la question suivante render_to_response .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X