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

时间:2012-12-23 10:17:31

标签: django django-templates

我想在模板中使用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'),

3 个答案:

答案 0 :(得分:9)

不需要getrequest.META是一个字典,与所有字典一样,您可以使用点表示法在模板中执行字段查找:{{ request.META.HTTP_REFERER }}

答案 1 :(得分:5)

django.core.context_processors.request的设置文件中添加TEMPLATE_CONTEXT_PROCESSORS,然后您就可以在模板中使用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}}

答案 2 :(得分:1)

实际上,首选方法是将next参数用作documented here

您可以在模板中执行以下操作:

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