2 Stimmen

Yourlabs-subscription Fehler -- VariableDoesNotExist-Fehler beim Rendern erfasst

Ich habe versucht, das aktualisierte Beispiel für Ihr Abonnement zu verwenden, und die Installation hat gut funktioniert, außer dass

  • Jede der Ansichten in der Abonnement-App gibt die Anfragevariable im Rendern an die Vorlage zurück.

  • diese Anfragekontext-Variable wird in der Vorlage nicht empfangen und daher erhalte ich den folgenden Fehler

    Caught VariableDoesNotExist while rendering: Failed lookup for key [request] in u

Weil dies in jeder Ansicht zurückgegeben wird, kann ich dieses Problem nicht lösen, indem ich einige Anpassungen in einer bestimmten Vorlage vornehme

2voto

Ryan Kaskel Punkte 4734

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X