LoginSignup
0
0

Django Template操作まとめ(自分用メモ)

Last updated at Posted at 2023-07-25

Django自分用メモになります

今回はTemplateの操作についてまとめます

開発環境

OS:mac
エディタ:vscode
python:3.10.9
django:4.1.0

templateに値を渡して表示させる

views.py
def home(request):
    return render(request,'home.html',context={
    'キー':'渡したい変数など'
}

#今回はクラスを定義してそれをtemplateに渡してみる
class Member:
    def __init__(self,name,id,picture,join_at):
        self.name = name
        self.id = id
        self.picture = picture
        self.join_at = join_at
        
member_list=[
    Member('Taro',0,'img/taro.jpg','2020/01/01'),
    Member('Jiro',1,'img/jiro.jpg','2021/2/3'),
    Member('Hanako',2,'img/hanako.jpg','2023/3/11'),
    Member('Yoshiko',3,'img/yoshiko.jpg','2020/2/7'),
    
]
#メンバーの一覧画面
def members(request):
    return render(request,'members.html',context={
        'members':member_list
    })
    
#メンバーの画面詳細
def member(request,id):
    return render(request,'member_detail.html',context={
        'member':member_list[id]
    })#idを受け取りインデックス番号の各メンバーデータをテンプレートに渡す

template間の画面遷移方法

home.html
<a href = "{% url = 'app:home' %}">ホームへ</a>
<a href = "{% url = 'app:members' %}">メンバー一覧</a>
<a href = "{% url = 'app:member_detail' id=member.id %}">{{member.name}}</a>
#urls.pyにてmember_detail/<int:id>といった詳細ページに飛ばしたいのであれば
#このようにidを持たせて飛ばすことができる

ここでのapp:homeとはurls.pyで変数app_nameに設定した名前と
urlpatternsで各パスごとに設定した名前(home)である。

urls.py
from django.urls import path
from . import views

app_name = 'app'#
urlpatterns=[
    path('home/',views.home,name='home'),#
    path('members/',views.members,name='members')
    path('member_detail/<int:id>/',views.member_detail,name='member_detail'),
]

画像やcssといった静的コンテンツの使用

index.html
{% load static %}
<link rel='stylesheet' href="{% static 'css/style.css'%}"> #CSS
<img src = "{% static 'img/example.jpg' %}"> #画像

#manage.pyと同じ階層にstaticというフォルダを作成
一つ下の階層にimgフォルダとcssフォルダを用意

事前にsetting.pyにてstaticの設定をする必要あり

setting.py
import os
STATIC_DIR = os.path.join(BASE_DIR,'static') 
STATIC_URL = 'static/'
STATICFILES_DIRS=[
    STATIC_DIR
]

フィルターの自作

manage.pyと同じ階層にtemplatetagsというフォルダを作成し、そのなかに
custom_tags.pyというファイルを作成し、そこに記述する

custom_tags.py
from django import template
register = template.Library()

#ここでは英字をすべて大文字にするフィルターを自作
@register.filter(name='str_upper')
def str_upper(value):
    return value.upper()

自作フィルターを使う

index.html
{% load custom_tags %}#自作フィルターを記述したファイルの読み込み

<p>名前{{member.name | str_upper}}</p>

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0