web-dev-qa-db-de.com

Django-Fehler: render_to_response () hat ein unerwartetes Keyword-Argument 'context_instance'

Nach dem Upgrade auf Django 1.10 erhalte ich die Fehlermeldung render_to_response() got an unexpected keyword argument 'context_instance'.

Meine Ansicht ist wie folgt:

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))

Hier ist das vollständige Traceback:

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

Der context_instance-Parameter in render_to_response war in Django 1.8 veraltet und wurde in Django 1.10 entfernt.

Die Lösung besteht darin, zur Verknüpfung render zu wechseln, die automatisch eine RequestContext verwendet.

Aktualisieren Sie Ihre Importe und Ansicht wie folgt. Beachten Sie, dass render das request-Objekt als erstes Argument verwendet.

from Django.shortcuts import render

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

Die render-Verknüpfung wurde in Django 1.3 eingeführt, daher ist diese Änderung mit älteren Versionen von Django kompatibel.

119
Alasdair

Django 2.0.7 Python 3.5

in project/urls.py

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

in project/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 = Keiner wird übergeben, da andernfalls TypeError ausgelöst wird: server_error () fehlt 1 erforderliches Positionsargument: 'exception'

1
VIctor Angelov

in Django 1.8 ist kompatibel:

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))

in 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