2012-12-23 17 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

、あなたが明示的に要求contextでそれを渡さずにテンプレートにrequestを使用することができるだろうTEMPLATE_CONTEXT_PROCESSORSでの設定ファイルにdjango.core.context_processors.requestを追加します。

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 
) 

テンプレートにあなたはgetのための必要はありません{{request.META.HTTP_REFERER}}

+0

私はこの答えはできません...これを適用する必要がありますか? settings.py?しかし、私のsettings.pyはTEMPLATE_CONTEXT_PROCESSORS変数を持っていません...私はdjango 1.4.3を使用しています。とにかくありがとうございました! – chobo

8

行うことができます。 request.METAは辞書で、そしてすべての辞書と同じように、あなたは、ドット表記を使用して、テンプレート内のフィールドのルックアップを実行することができます。{{ request.META.HTTP_REFERER }}

+0

私はこの答えを試みます...しかし、request.META.HTTP_RERERERは空です... – chobo

+0

それは空であることを意味します。このケースでは、彼はミスペレットそのものであることを考えると、それは理解できないタイプミスを持っているからです。 '{{request.META.HTTP_REFERER}}'を試してください。それが空の場合、それは1つがないことを意味します。 – Tom

+1

私はPythonの初心者ですが、.get表記を使用する理由の1つは、値が存在しないというデフォルト値を指定することです。例:HTTP_REFERERが存在しない場合は、request.META.get( "HTTP_REFERER"、 "localhost")はHTTP_REFERERの実際の値を返すか、localhostを返します。この構文がテンプレート内で機能するかどうかはわかりませんが、それを選択する理由があるかもしれません。 –

2

実際に好ましい方法は、あなたがあなたの中で行うことができますdocumented here

としてnextパラメータを使用することですテンプレートは次のようなものです:

<input type="hidden" name="next" value="{{ request.GET.next }}" /> 
関連する問題