web-dev-qa-db-fra.com

Erreur Django: render_to_response () a reçu un argument de mot clé inattendu, "context_instance"

Après la mise à niveau vers Django 1.10, l'erreur render_to_response() got an unexpected keyword argument 'context_instance' s'affiche.

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 le suivi 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'
57
Alasdair

Le paramètre context_instance dans render_to_response était obsolète dans Django 1.8 et supprimé dans Django 1.10.

La solution consiste à basculer vers le raccourci render , qui utilise automatiquement un RequestContext.

Mettez à jour vos importations et affichez comme suit. Notez que render prend l'objet request comme premier argument.

from Django.shortcuts import render

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

Le raccourci render a été introduit dans Django 1.3. Cette modification est donc compatible avec les anciennes versions de Django.

119
Alasdair

Django 2.0.7 python 3.5

dans le 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é car sinon, il lève TypeError: server_error () manquant 1 argument positionnel requis: 'exception'

1
VIctor Angelov

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
Dantez Layton