複数ページ間の移動
別ページへのリンクを貼る
hello/templates/hello/index.html
を修正し、別ページへ移動できるようにする。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{{title}}</title> </head> <body> <h1>{{title}}</h1> <p>{{msg}}</p> <p><a href="{% url goto %}">{{goto}}</a></p> <!-- <=追加箇所 --> </body> </html>
views.py
を修正
hello/views.py
を修正し、index以外のページへのビュー関数を追加する。
def index(request): params = { 'title': 'Hello/Index', 'msg': 'これはサンプルページです。', 'goto': 'next', } return render(request, 'hello/index.html', params) def next(request): params = { 'title': 'Hello/Next', 'msg': 'これはもう一つのページです。', 'goto': 'index', } return render(request, 'hello/index.html', params)
urlpatterns
を修正する
hello/urls.py
を修正し、別のページへのパスを作る。
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('next', views.next, name='next'), ]
これでhttp://localhost:8000/hello/
にアクセスすると、次のように表示され、「next」と書かれたリンクをクリックすると
http://localhost:8000/hello/next
にアクセスし、次の表示になる。
「index」と書かれたリンクで元のページに戻る。
テンプレートタグ {% %}
{% .... %}
はテンプレートタグと呼ばれるもので、条件分岐や繰り返しなどの構文がテンプレートの中で使える。
{% %}
の中で使えるurl
は組み込みタグ構文の一つで、ビューとオプションの引数を指定すると、マッチする絶対パスへの参照を返す(ドメイン部分を除いたURL)。パスに特殊文字が含まれる場合、iri_to_uri()
を使ってエンコードされる。
ここでは{% url goto %}
とすることで、hello/urls.py
のurlpatterns
で定義された名前name='next'
やname='index'
のリンク先に飛ぶことになる。
urlpatterns = [ path('', views.index, name='index'), path('next', views.next, name='next'), ]
goto
という変数名で渡すパス名を、index関数
とnext関数
内のパラメータで変えることで、同じテンプレートの記述であっても、リンク先を変化させている。
静的ファイルの読み込み
.js, .css, 画像などの静的ファイルは、アプリ内のstatic
フォルダに置く。この中にテンプレートの場合と同じで、やはりアプリ名のDIRを作り、その中でファイルの種類ごとに管理する。
例えばhello/static/hello
というDIRを作って、その中に「js, css, img」などのフォルダを作って管理すればよい。
hello/templates/hello/index.html
の<head>
タグ内にCSSファイルを読み込む。
{% load static %} <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{{title}}</title> <link rel="stylesheet" href="{% static 'hello/css/style.css' %}" /> </head> <body> <h1>{{title}}</h1> <p>{{msg}}</p> <p><a href="{% url goto %}">{{goto}}</a></p> </body> </html>
冒頭の{% load static %}
によってstatic
フォルダ内が読めるようになる。CSSファイルなどの読み込みは{% static 'hello/css/style.css' %}
などとすればよい。
.jsファイル や画像も同じ方法で読み込める。