2012-12-23 50 views
8

我想在模板中使用request.META.get('HTTP_REFERER')如何在模板中使用request.META.get('HTTP_REFERER')?

我的模板來源:

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

如何我應該怎麼辦?

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

回答

5

TEMPLATE_CONTEXT_PROCESSORS設置文件添加django.core.context_processors.request,那麼你將能夠使用模板request沒有明確地傳遞給它的請求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 
) 

的模板,你可以做{{request.META.HTTP_REFERER}}

+0

我不能這個答案......應該怎麼做? settings.py中?但我的settings.py沒有TEMPLATE_CONTEXT_PROCESSORS變量...我使用django 1.4.3。無論如何謝謝你! – chobo

8

沒有必要爲getrequest.META是一本字典,並與所有的詞典,可以使用點符號模板進行現場查詢:{{ request.META.HTTP_REFERER }}

+0

我嘗試這個答案...但request.META.HTTP_RERERER是空的... – chobo

+0

這意味着它是空的。在這種情況下,因爲他有一個錯字,這是可以理解的,因爲名字是拼寫錯誤本身。嘗試'{{request.META.HTTP_REFERER}}';如果它是空的,那意味着沒有一個。 – Tom

+1

我對Python很新,但使用.get符號的一個原因是指定一個沒有值的默認值。例如: request.META.get(「HTTP_REFERER」,「localhost」)將導致它返回HTTP_REFERER的實際值,或者如果沒有HTTP_REFERER返回本地主機。不確定此語法是否在模板中起作用,但它可能是選擇其中一個的原因。 –

2

事實上的首選方法是使用next參數爲documented here

你可以做你的模板是這樣的:

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