投稿日: | 最終更新日:
template使用のおさらい(Django)
Djangoで簡単なviewを作成し、templateを使用して表示します。
Djangoのtemplate
Djangoのtemplateとは、htmlファイルです。viewのデータをtemplateのhtmlで受け取って表示します。tmplateは、以下のようにアプリケーションディレクトリの下のtmplateディレクトリへ設置します。
project/app/templates/app/
形式は一般的なhtmlとほぼ変わりません。htmlコードの中で「{{ var }}」のように中括弧2つで囲むとDjangoから渡された値を使用できます。また、「{% func %}」の形式でテンプレートタグと呼ばれる関数を実行することができます。
前提
- 既にDjangoのプロジェクトを作成済み。
- 投票アプリ用モデル(Choice、Question)作成済み。
準備
当サイトでは、Vagrantでゲスト環境(仮想環境)を作ってDjangoを動かいていますが、それ以外の環境でも操作方法はだいたい同じです。
①Djangoプロジェクトを生成します。
→VagrantのDjangoで作るWebアプリケーション(その1 プロジェクト生成)
②Djangoアプリケーションを作ります。
→VagrantのDjangoで作るWebアプリケーション(その2 プロジェクトの初期設定)
③投票アプリのモデルを定義します。
→投票アプリを作る その1モデルの定義、管理サイトの表示(Django)
④urlのルーティングを設定し、Viewを作成します。
→viewの作成とurlの接続・url関数のおさらい(Django)
環境
OS | CentOS 7.1.1503 |
---|---|
pyenv | 1.1.3-5-g7dae197 |
Anaconda | 3-4.3.0 |
MariaDB | 5.5.52-1.el7 |
Apache | 2.4.6 |
mod_wsgi | 4.6.3 |
Django | 2.0.3 |
テストアプリ概要
①以下のようなDjangoアプリ構成を作ります。プロジェクト名が「pj1」で、アプリケーション名が「users」です。プロジェクトの設定は済ませたものとします。赤字のファイルは、今回変更する部分です。
- pj1/
- pj1/
- __init__.py
- settings.py
- urls.py
- wsgi.py
- users/
- __init__.py
- admin.py
- apps.py
- urls.py
- views.py
- models.py
- templates/
- polls/
- index.html
templateの使用
①usersディレクトリのurls.pyに以下の記述をします。
from django.conf.urls import url from . import views urlpatterns = [ url(r'^polls/$', views.index, name='index'), # urlとviewの結びつけ ]
※前回の「viewの作成とurlの接続・url関数のおさらい(Django)」と同じです。
②pj1ディレクトリのurls.pyに以下の記述をします。
from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url('admin/', admin.site.urls), url(r'^', include('users.urls', namespace = 'users')) # urlと他のurlpatternsとの結びつけ ]
③usersディレクトリのviews.pyに以下の記述を追加します。
from django.shortcuts import render def index(request): return render(request, 'polls/index.html')
render関数
requestとテンプレートパスを渡すと、そのテンプレートを使用したレンダリング結果をHttpResponseとして返します。
④templatesディレクトリ配下にpollsディレクトリを作成し、以下の内容のindex.htmlを作成します。
<html> <body> <p>Hello, world. You're at the polls index.</p> <p>template version!</p> </body> </html>
⑤簡易サーバを起動します。
cd pj1 python manage.py runserver 0.0.0.0:8000
⑥ブラウザから「http://localhost:8000/polls/」にアクセスします。すると、以下のような結果がでます。
templateへの値渡し
ここまでで静的なページは作れるようになりました。次に動的ページを作ります。
①usersディレクトリのviews.pyに以下の記述を追加します。
from django.shortcuts import render def index(request): return render(request, 'polls/index.html', { 'hoge': 'test string', 'fuga': '<br>tag</br>', })
renderメソッド
renderの第3引数にpythonの辞書を渡すことでtemplateに値を渡すことができます。template内で渡された値を使う場合は{「{ var }}」の形式で書きます。
②以下の内容のindex.htmlに記述します。
<html> <body> <p>Hello, world. You're at the polls index.</p> <p>template version!</p> <p>{{ hoge }}</p> <p>{{ fuga }}</p> </body> </html>
③簡易サーバを起動します。
cd pj1 python manage.py runserver 0.0.0.0:8000
④ブラウザから「http://localhost:8000/polls/」にアクセスします。すると、以下のような結果がでます。
htmlタグをエスケープしない
fugaは<br>がエスケープされて出力されてしまっています。セキュリティ的には嬉しいですが,タグを出力したい場合があります。タグを出力する場合には、「django.utils.html.mark_safe関数」を使用します。この関数は文字列が安全であるという印をつけ、それ以上エスケープされないようにします。
from django.shortcuts import render from django.utils.html import mark_safe def index(request): return render(request, 'polls/index.html', { 'hoge': 'test string', 'fuga': '<br>tag</br>', 'piyo': mark_safe('<br>tag</br>'), })
- Python 114
- 制作 54
- RaspberryPi 41
- Django 40
- WordPress 40
- Linux 27
- VPS 22
- JavaScript 21
- PHP 20
- HTML・CSS 19
- AWS 16
- 仮想環境 15
- レスポンシブデザイン 13
- マイコン 11
- WEB全般 11
- 動画製作 9
- Webサービス 8
- 統合開発環境 8
- 機械学習 8
- PyCharm 7
- jQuery 7
- AfterEffects 7
- 起業・設立 7
- Django REST framework 6
- C# 6
- デザイン 6
- SEO 6
- pydata 6
- Visual Studio 5
- 数学 5
- 携帯サイト 5
- heroku 5
- Mac 5
- illustrator 5
- node.js 5
- Anaconda 5
- Nginx 4
- Jupyter Notebook 4
- インフラ 4
- Google Colaboratory 4
- symfony 4
- Webスクレイピング 3
- photoshop 3
- Go言語 3
- PC 3
- ツール 3
- Docker 3
- facebook 3
- 作業効率化 3
- データベース 3
- Cloud9 3
- コマンド 2
- micro:bit 2
- Kali Linux 2
- Webサーバー 2
- MariaDB 2
- ドローン 2
- コンテナ 2
- DaVinci Resolve 2
- ネットワーク 2
- Java 2
- movie 2
- PCDJ 2
- 音楽 2
- XSERVER 2
- Ansible 1
- Vue.js 1
- JSON 1
- Bootstrap 1
- バージョン管理システム 1
- SSL 1
- S3 1
- ムームードメイン 1
- ネットワーク 1
- アニメーション 1
- D3.js 1
- Rhino 1
- アニメ 1
- git 1
- windows 1
- アクセス解析 1
- スマートフォン 1
- アフィリエイトノウハウ 1
- 知識 1
- TypeScript 1
- 役立つ本・書籍 1
- データサイエンス 1
- ESP32 1
- AI 1
- ownCloud 1
- API 1