2012-12-23 7 views
8

Chciałbym użyć szablonu request.META.get('HTTP_REFERER').Jak używać request.META.get ("HTTP_REFERER") w szablonie?

Moje źródło szablon:

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

Jak co powinienem zrobić?

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

Odpowiedz

5

Dodaj django.core.context_processors.request w pliku ustawień w TEMPLATE_CONTEXT_PROCESSORS wtedy będzie mógł wykorzystać request w szablonie bez wyraźnego przekazania go na żądanie 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 
) 

in szablonie można zrobić {{request.META.HTTP_REFERER}}

+0

Nie mogę tej odpowiedzi ... Co powinienem zastosować? settings.py? Ale moja settings.py nie ma zmiennej TEMPLATE_CONTEXT_PROCESSORS ... Używam django 1.4.3. Mimo wszystko dziękuję! – chobo

8

Nie ma potrzeby get. request.META jest słownikiem, jak i ze wszystkimi słowników, można wykonać wyszukiwanie pola w szablonie za pomocą kropki notacji: {{ request.META.HTTP_REFERER }}

+0

Próbuję odpowiedzieć na to pytanie ... Ale request.META.HTTP_RERERER jest pusty ... – chobo

+0

To znaczy, że jest pusty. W tym przypadku, ponieważ ma literówkę, co jest zrozumiałe, ponieważ nazwa jest źle napisana. Wypróbuj '{{request.META.HTTP_REFERER}}'; jeśli jest pusty, to znaczy, że go nie ma. – Tom

+1

Jestem całkiem nowy w Pythonie, ale jednym z powodów używania notacji .get jest określenie domyślnej wartości bez wartości. Np .: request.META.get ("HTTP_REFERER", "localhost") spowodowałoby, że zwróci on rzeczywistą wartość HTTP_REFERER lub zwróci localhost, jeśli nie ma HTTP_REFERER. Nie jestem pewien, czy ta składnia działa w szablonie, ale może być powodem do wyboru jednego z nich. –

2

Faktycznie preferowanym sposobem jest użycie parametru next jako documented here

można robić w szablon coś takiego:

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