2012-12-23 7 views
8

Ich möchte request.META.get('HTTP_REFERER') in Vorlage verwenden.Wie verwende ich request.META.get ('HTTP_REFERER') in der Vorlage?

Meine Vorlage Quelle:

<!-- this is login.html --> 
{% extends "base.html" %} 
{% block title %}django bookmark- login{% endblock %} 
{% block head %}login{% endblock %} 
{% block content %} 
    {% if form.errors %} 
    <p>try again!</p> 
    {% endif %} 
    <form method="post" action=".">{% csrf_token %} 
     <p><label for="id_username">username:</label> 
     {{ form.username }}</p> 
     <p><label for="id_password">password:</label> 
     {{ form.password }}</p> 
     <input type="hidden" name="next" value="/<!-- I WANT TO USE 'HTTP_REFERER' HERE -->" /> 
     <input type="submit" value="login" /> 
    </form> 
{% endblock %} 

Wie, was soll ich tun?

urlpatterns = patterns('', (r'^login/$', 'django.contrib.auth.views.login'), 

Antwort

5

django.core.context_processors.request in Ihrer Einstellungsdatei in TEMPLATE_CONTEXT_PROCESSORS hinzufügen dann würden Sie in der Lage sein, die request in Vorlage zu verwenden, ohne es context in Anforderung explizit übergeben.

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth', 
    'django.core.context_processors.debug', 
    'django.core.context_processors.i18n', 
    'django.core.context_processors.media', 
    'django.core.context_processors.static', 
    'django.core.context_processors.request', # this one 
) 

in der Vorlage können Sie {{request.META.HTTP_REFERER}}

+0

Ich kann diese Antwort nicht ... Was sollte das anwenden ?? settings.py? Aber meine settings.py haben nicht TEMPLATE_CONTEXT_PROCESSORS variable ... ich benutze django 1.4.3. Trotzdem danke! – chobo

8

tun für get gibt es keine Notwendigkeit. request.META ist ein Wörterbuch, und wie bei allen Wörterbüchern können Sie Feld Lookup in der Vorlage unter Verwendung der Punktnotation auszuführen: {{ request.META.HTTP_REFERER }}

+0

Ich versuche diese Antwort ... Aber request.META.HTTP_RERERER ist leer ... – chobo

+0

Das bedeutet, es ist leer. In diesem Fall, weil er einen Tippfehler hat, was angesichts des Namens verständlich ist, ist selbst falsch geschrieben. Versuchen Sie '{{request.META.HTTP_REFERER}}' '; Wenn es leer ist, heißt das, dass es keinen gab. – Tom

+1

Ich bin ziemlich neu in Python, aber ein Grund für die Verwendung der .get-Notation besteht darin, einen Standardwert anzugeben, bei dem kein Wert vorhanden ist. Beispiel: request.META.get ("HTTP_REFERER", "localhost") würde entweder den tatsächlichen Wert von HTTP_REFERER zurückgeben oder localhost zurückgeben, wenn kein HTTP_REFERER vorhanden ist. Ich bin mir nicht sicher, ob diese Syntax in einer Vorlage funktioniert, aber es könnte ein Grund dafür sein, sich gegenseitig zu wählen. –

2

Tatsächlich ist die bevorzugte Art und Weise verwenden, um die next Parameter als documented here

Sie tun können, in Ihrem Vorlage etwas wie dies:

<input type="hidden" name="next" value="{{ request.GET.next }}" /> 
Verwandte Themen