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>