ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本: is_authenticated
Django で「ログインしているか」を判定する最もシンプルな方法:
{# templates/base.html #}
user 変数はテンプレート内で自動的に使えます(後述の context processor が設定されている場合)。
context_processors の確認
テンプレートから user や request を参照できるのは、Django のauth コンテキストプロセッサが有効だからです:
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request', # ← request 変数
'django.contrib.auth.context_processors.auth', # ← user / perms 変数
'django.contrib.messages.context_processors.messages',
],
},
},
]
auth プロセッサが入っていれば、すべてのテンプレートで {{ user }} と {{ perms }} が使えます。
権限別の表示制御
{% if user.is_authenticated %}
{# 一般会員向け #}
マイページ
{% if user.is_staff %}
{# スタッフ向け(管理画面アクセス可) #}
管理画面
{% endif %}
{% if user.is_superuser %}
{# スーパーユーザー専用 #}
システム設定
{% endif %}
{% if user.email_verified %}
{# 自前で追加した属性も普通に使える #}
認証済
{% endif %}
{% else %}
ログイン
{% endif %}
パーミッション判定: {% if perms.app.action %}
Django の django.contrib.auth のパーミッションシステムに沿うなら:
{# polls アプリの change_poll 権限を持っているか #}
{% if perms.polls.change_poll %}
編集
{% endif %}
{# 複数 #}
{% if perms.polls.add_poll and perms.polls.delete_poll %}
{% endif %}
グループ判定
「特定のグループに所属しているか」をテンプレートで判定したい場合:
# myapp/templatetags/auth_extras.py
from django import template
register = template.Library()
@register.filter(name='has_group')
def has_group(user, group_name):
return user.groups.filter(name=group_name).exists(){% load auth_extras %}
{% if user|has_group:"editors" %}
編集者ダッシュボード
{% endif %}
{% if user|has_group:"premium" %}
プレミアムコンテンツ
{% endif %}
テンプレートタグでより複雑な判定
# myapp/templatetags/auth_extras.py
from django import template
register = template.Library()
@register.simple_tag(takes_context=True)
def can_edit(context, obj):
"""記事の作者 or staff なら True"""
request = context['request']
user = request.user
if not user.is_authenticated:
return False
if user.is_staff:
return True
return obj.author_id == user.id{% load auth_extras %}
{% can_edit article as user_can_edit %}
{% if user_can_edit %}
編集
{% endif %}
ログイン強制は view 側で
テンプレートで条件分岐するだけではセキュリティ的に不十分です。データを返さないようにするには view 側で:
from django.contrib.auth.decorators import login_required, permission_required, user_passes_test
@login_required
def mypage(request):
return render(request, 'mypage.html')
# ログインしてかつパーミッションを持っているか
@permission_required('polls.add_poll', raise_exception=True)
def add_poll(request):
...
# カスタム条件
@user_passes_test(lambda u: u.is_authenticated and u.email_verified)
def verified_only(request):
...
# クラスベースビューなら LoginRequiredMixin
from django.contrib.auth.mixins import LoginRequiredMixin
class MyPageView(LoginRequiredMixin, TemplateView):
template_name = 'mypage.html'
login_url = '/login/'
テンプレート内で次の URL を保持
ログイン後に元のページに戻すには:
ログイン
{# ログインフォーム側 #}
非匿名ユーザーの判定(旧 API)
| 記述 | 意味 | 備考 |
|---|---|---|
user.is_authenticated | ログイン済か | 1.10+ から property(() 不要) |
user.is_anonymous | 未ログインか | 同上 |
user.is_active | アカウント有効か | 停止アカウントは False |
user.is_staff | 管理画面アクセス可 | admin/ で必要 |
user.is_superuser | 全権限 | perms 判定をバイパス |
FAQ
Q: テンプレートで user が常に AnonymousUser になる
A: context processor の django.contrib.auth.context_processors.auth が抜けている可能性。settings.py を確認。または render() の代わりに自前の RequestContext を使い回している。
Q: DRF のテンプレートビューでログイン判定したい
A: APIView では request.user.is_authenticated を view 内で判定し、permission_classes = [IsAuthenticated] を設定。
Q: テンプレートで OR / AND を書きたい
A: {% if user.is_staff or user.is_superuser %} のように普通に or / and / not が使えます。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 環境構築とプロジェクト/アプリの作成
- MVC(MVT)のそれぞれの使い方と説明
- データベースへの接続と操作
- Django Administration
- git管理
- エラー一覧
- バージョンの確認方法
- ログ出力方法
- SQLのログ出力方法
- ログのローテート設定
- settings.pyの定数にアクセスする方法
- 本番環境へのインストールとアプリのデプロイ(apache編)
- 本番環境へのインストールとアプリのデプロイ(nginx編)
- djangoアプリの本番の開始URLを変更する
- 静的(static)ファイルの置き場所と読み込み(画像、css、js )
- CSRFトークンをAjaxで使用する方法
- ajaxの使用例(POST編)
- ファイルのアップロードとファイルの名前
- クイックスタート/チュートリアル
- ログイン機能
- テンプレート側のログイン判定
- ビュー側のログイン判定
- 管理者ユーザーの作成/判定と管理画面
- モデルのjson化とレスポンス
- runserverでポートを指定する方法
- cronによるバッチ実行
- テンプレートで利用する共通のcontextを定義する方法
- プログラムが本番サーバーで反映されない場合の対処法
- APIの作成
- cron用コマンド・ファイルの作成
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?