Dies geschieht, weil request
nicht im Kontext Ihres Templates ist und das Template einige Template-Code verwendet, der erwartet, dass es dort ist. Dieser Code (z.B. ein benutzerdefiniertes Template-Tag) sollte besser behandeln VariableDoesNotExist
Zusätzlich sollten Ihre Ansichten wahrscheinlich nicht bei jeder Antwort explizit request
zurückgeben. Lassen Sie Django das für Sie erledigen.
Fügen Sie dazu den Request-Template-Kontextprozessor hinzu, der mit Django geliefert wird, zu Ihrem TEMPLATE_CONTEXT_PROCESSORS
:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'django.core.context_processors.request',
...
)
Wenn Sie diesen Template-Kontextprozessor bereits verwenden, stellen Sie sicher, dass render_to_response
mit context_instance=RequestContext(request)
als letzten Argument aufgerufen wird (das folgende Beispiel stammt aus den Dokumenten):
def some_view(request):
# ...
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
Dadurch wird sichergestellt, dass alle von den Template-Kontextprozessoren in TEMPLATE_CONTEXT_PROCESSORS
zurückgegebenen Dicts an das Template übergeben werden.
Sie könnten auch die render
-Shortcut verwenden, der das Template automatisch mit einer Instanz von Requestcontext
rendert.
Eine weitere Option, die in Django 1.3 hinzugefügt wurde, ist die TemplateResponse
, die ebenfalls eine Instanz von RequestContext
verwendet.