2012-02-21 8 views
3

私はDjangoの認証システムと一緒に登録とログイン/ログアウトを管理するためにDjangoの登録を使用しています。それは正常に動作して、私はログインするために別のページにユーザーを連れて行く 'ログイン'リンクを置いている基本テンプレートがあります。このリンクを実際のログインフォーム(ユーザー名/パスワード)に置き換えて、フォームがすべてのページに直接表示されるようにしたいと思います。助言がありますか?ログインフォームをDjangoの全サイトで利用できるようにするには

+1

をHTTPS(それがあるべきとして)その後、HTTP - > HTTPS POST CSRFチェックのために失敗する。 https://code.djangoproject.com/ticket/13849またはhttp://groups.google.com/group/django-developers/browse_thread/thread/22058adaf11e3ed6 –

答えて

5

あなたは次のようになりますカスタムタグを構築するためにinclusion template tagを使用することができます。

{% login_form %} 

ように、それは、ログインビューに?next={{ request.get_absolute_uri }}パラメータで使用できるように、このタグにrequest.get_absolute_uriを渡したいかもしれませんログイン後にユーザーを現在のページにリダイレクトすることができます。

このようにして、DRYの原則に違反することなく、テンプレートに任意の場所にログインフォームを置くことができます。あなたも、何か使って、基本テンプレートに埋め込むことができます:あなたのサイトには、HTTP経由で表示され、ログインページがある場合に注意すべきである

{% if not user.is_authenticated %} 
    {% login_form %} 
{% else %} 
    {# display welcome message. #} 
{% endif %} 
+0

を参照してくださいどのように私はタグ、任意のヒントのビュー内から要求にアクセスすることができます理解していない? – Bastian

+0

OK、ここから取得しました[アクセスリクエストのdjango-custom-template-tags](http://stackoverflow.com/questions/2160261/access-request-in-django-custom-template-tags) – Bastian

+0

しかし、リクエストにアクセスしても、request.get_absolute_uriをどのように渡すかはわかりません。それを明確にしてもらえますか? – Bastian

1

基本テンプレート内にログインフォームを埋め込み、ユーザがまだログオンしていない場合にのみ、ログインフォームを表示するためにrequest.userを自分のサイトのテンプレートに渡します。

だから私のビューのdictに私は'user': request.userと私のテンプレートが含まれるが、このようになります。

{% if not user.is_authenticated %} 
<form><fieldset><!-- Your login form here --></fieldset></form> 
{% else %} 
<!-- If you want to display something else if the user is logged in, like --> 
<p>Welcome, {{ user }}!</p> 
{% endif %} 
2

あなたがこれを行う可能性がいくつかの異なる方法:

  1. お使いのベースのテンプレートを変更し、ハードコードをフォーム(CSRFトークンを忘れないでほんの少しのフィールドです。 )。
  2. コンテキストプロセッサを使用して、Djangoフォーム変数 をすべてのテンプレートで使用できるようにします。
  3. カスタムテンプレートタグを作成して フォームを表示し、それをベーステンプレートに使用します。

あなたは、このようなテンプレートにロジックをラップする可能性がよいでしょう:

{% if user.is_authenticated %} 
    <!-- maybe show a logout link --> 
{% else %} 
    <!-- display your form using one of the methods above --> 
{% endif %} 

注:auth template context processorを使用している場合は、ユーザー変数は、すべてのテンプレートに利用できるようになります。

関連する問題