[Django]セッションをテンプレートで直接表示する

Django Logo プログラミング

Django のテンプレートでセッションの情報を直接表示する方法を説明していきます。
サンプルのプロジェクトもあるので、そちらの方も確認してみてください。

GitHub - koichi-ezato/mysite
Contribute to koichi-ezato/mysite development by creating an...

まぁ、結論からいくと下記の様にテンプレートでセッションを呼び出せば、セッションをテンプレートで表示可能です。

{{ request.session.session_key }}

session_key 」のところは自分で登録したセッション名に修正してください。

setting.py の設定内容確認

まず、セッションを利用可能な状態にするために「 setting.py 」の設定内容を確認します。

INSTALLED_APPS 」と「 MIDDLEWARE 」に下記の記述があるか確認します。なければ追加します。

INSTALLED_APPS = [
    ...
    'django.contrib.sessions',
    ...
]

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    ...
]

views.py でセッションを保存する

今回は polls アプリケーションの views.py にある QuestionCreateView でセッションの保存を行いました。

class QuestionCreateView(generic.CreateView):
    form_class = QuestionForm
    template_name = 'question/create.html'

    def get_context_data(self, **kwargs):
        # セッションを追加する
        self.request.session['add_session'] = 'セッション追加'
        self.request.session['array_session'] = dict(a='配列も', b='セッションに保管できます')
        return super(QuestionCreateView, self).get_context_data(**kwargs)

テンプレートにセッションを表示する

下記の様に記述しテンプレートでセッションを表示します。

<p>セッション表示テスト</p>
add_session:{{ request.session.add_session }}<br>
array_session.a:{{ request.session.array_session.a }}<br>
array_session.b:{{ request.session.array_session.b }}

動作確認

http://localhost:8000/polls/create/ にアクセスすると、

画面上にセッションの内容が表示されているのが確認できました!!

参考までに Django でのセッションの操作方法をメモしておきます。

セッションの操作方法

基本的な操作方法は連想配列の操作とほぼ同じですね。

保存

request.session['session_key'] = var

存在確認

if 'session_key' in request.session:

読み込み

var = request.session['session_key']

削除

del request.session['session_key']

セッションクリア

request.session.clear()

最後に

今回、セッション情報をテンプレートで直接表示したいと思ったのは、別の画面で保存したセッション情報を表示する際に、わざわざ views.py でセッションを取得してテンプレートに渡す処理を簡略化したかったからです。せっかく一度セッションを保存しているのに、毎回ビュー側でセッションの存在確認や読み込みを行うのは手間になるので、その手間は省くことができたかなと思います。

コメント

モバイルバージョンを終了
タイトルとURLをコピーしました