2012-12-23 13 views
8

Mi piacerebbe usare request.META.get('HTTP_REFERER') all'interno del modello.Come utilizzare request.META.get ('HTTP_REFERER') all'interno del modello?

La mia fonte modello:

<!-- 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 %} 

Come quello che devo fare?

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

risposta

5

Aggiungi django.core.context_processors.request nel file delle impostazioni in TEMPLATE_CONTEXT_PROCESSORS allora si sarebbe in grado di utilizzare il request nel modello senza passare esplicitamente nella richiesta context.

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 
) 

l'nel modello che si potrebbe fare {{request.META.HTTP_REFERER}}

+0

Non riesco a questa risposta ... Che cosa dovrebbe applicare questo ?? settings.py? Ma il mio settings.py non ha TEMPLATE_CONTEXT_PROCESSORS variabile ... Io uso django 1.4.3. Comunque grazie! – chobo

8

Non c'è bisogno di get. request.META è un dizionario, e come con tutti i dizionari, è possibile eseguire ricerca di campo nel modello utilizzando la notazione punto: {{ request.META.HTTP_REFERER }}

+0

Provo questa risposta ... Ma request.META.HTTP_RERERER è vuoto ... – chobo

+0

Ciò significa che è vuoto. In questo caso perché ha un errore di battitura, il che è comprensibile dato che il nome è errato stesso. Prova '{{request.META.HTTP_REFERER}}'; se è vuoto, significa che non ce n'era uno. – Tom

+1

Sono piuttosto nuovo in Python, ma uno dei motivi per cui si usa la notazione .get è specificare un valore predefinito di assenza di valore. Ad esempio: request.META.get ("HTTP_REFERER", "localhost") causerebbe il ritorno del valore effettivo di HTTP_REFERER o il ritorno di localhost se non ci fosse HTTP_REFERER. Non sono sicuro se questa sintassi funzioni in un modello, ma potrebbe essere un motivo per sceglierne uno rispetto all'altro. –

2

In realtà il modo migliore è quello di utilizzare il parametro next come documented here

Si può fare nella vostra modello qualcosa del genere:

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