blog,web開発準備ブログ

blog,web開発のために調べたメモをまとめるブログです。

Djangoのviewの書き方

Djangoのviewは、受け取ったWebリクエストを処理し、Webレスポンスを返す関数です。通常は、views.pyというファイルにviewを記述します。

基本的な書き方

def my_view(request):
    # View code here...

基本的には、requestを最初の引数に取ったviewを書きます。URLconfでキーワード引数を取得した場合は、requestに続いてキーワード引数を書いていきます。

render関数

django.shortcuts.renderを使うと、簡単にviewを書けます。render関数は、よく使う引数を含めると、render(request, 'template_name', 'context')という形式になります。requestはレスポンスを返すために必要なオブジェクトです。とにかくrequestと書いておけばいいです。template_nameは使用するhtmlのテンプレートです。contextは、テンプレートへ渡す辞書です。URLconfで取得した値やviewで作成した値をcontextで渡せます。

from django.shortcuts import render

def my_view(request, year, month):
    # View code here...
    return render(request, 'myapp/index.html', {
        'year': 'year',
        'month': 'month',
        'foo': 'bar'})

参考

ビューを記述する | Django documentation | Django

Django shortcut functions | Django documentation | Django

DjangoのURL処理(その2)

debpre.hatenablog.com上のリンクにある前回の続きです。前回と同じく、Python3、Django1.11を使っています。

URLからキーワード引数の取得

url関数の正規表現で、 名前付きの正規表現グループを使うと、URLからキーワード引数を取得できます。(?P<name>pattern)の形式で、nameが引数を入れる変数、patternがマッチさせるために用意する正規表現です。URL ディスパッチャ | Django documentation | Djangoの例を簡略したコードが下のものです。

from django.conf.urls import url
from . import views

urlpatterns = [
    ....
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    ...
]

この例のurl関数では、year、monthという2つの変数を取得し、views.month_archiveへと送っています。例えば、http://example.com/というサイトで、http://example.com/articles/2018/01/にリクエストがあった場合、year='2018'、month='01'という形で2つの値を取得できます。

他のURLモジュールを含める

include関数を使うことで、urlpatternsに他のURLconfモジュールを含めることができます。include関数は引数にURLconfモジュールをとります。include関数は、url関数の正規表現から後のURLをinclude関数の引数で指定したURLconfモジュールへ渡します。下はその例です。

#myproject.urls
from django.conf.urls import include, url

urlpatterns = [
    url(r'^column/$', include('column.urls')),
    ...
    ]
#column.urls
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^[0-9]{3}/$', views.column_detail, name='column-detail')
    ...
    ]

例えば、http://example.com/というサイトで、http://example.com/column/003/にリクエストがあった場合、'003/'がcolumn.urlsに渡されます。

DjangoのURL処理(その1)

Python3のwebフレームワーク、DjangoのURL処理で、よく使うものを解説します。Djangoのバージョンは1.11です。

設定

Djangoでは、ページのリクエストがあったとき、settings.pyのROOT_URLCONFに設定されているモジュールを参照します。初期設定では、

ROOT_URLCONF = 'myproject.urls'

となります。myprojectdjango-admin startprojectで作ったプロジェクト名です。ここでは、urls.pyにURL処理を書いていきます。

基本的な使い方

Djangoでは、URLと表示したいページや処理方法を結びつけるものをURLconfというモジュール(通常、urls.pyというファイル)に書きます。 django.conf.urlsから、url関数をインポートし、urlpatternsへurl関数から作られるインスタンスのリストを代入します。url関数は、

url(r'regularexpression', view, name='name')

という形式になります。regularexpressionpython正規表現です。この正規表現で、URLを指定します。例えば、regularexpressionをcontentsとしたとき、サイトのアドレスがhttp://www.example.com/の場合、http://www.example.com/contents/のURLにヒットします。viewでデータを処理します。nameはテンプレートでページリンクをするときに利用します。下はurls.pyの例です。

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index),
    url(r'^contents/$', views.contents),
]

Bootstrap4 Grid systemのメモ

Bootstrap4でブログのレイアウトデザインをする際に、使えそうなものの要約です。詳しい使い方は公式のドキュメントに載っています。

getbootstrap.com

基本的な使い方

基本的には、

<div class="container"> 
  <div class="row">
    <div class="col">Column1</div>
    <div class="col">Column2</div>
    <div class="col">Column3</div>
  </div>
<div class="row">
    <div class="col">Column4</div>
    <div class="col">Column5</div>
  </div>
</div>

という風に、colクラス、rowクラスの要素をcontainerクラスの要素で囲むようにして使います。ネーミングが直感的なので、htmlのテーブルのタグをクラスに変えたものとほぼ同じです。 rowクラスの要素で行の区切りをして、colクラスの要素で列の区切りをします。colクラスの要素は、containerクラスの横幅を等分するように配置されます。

containerクラスの代わりに、container-fluidクラスも使えます。container-fluidクラスは、containerクラスと違い、親要素の横幅全体に広がります。

Grid options

colクラスは、オプションがあり、ブレイクポイントとコラム数が指定できます。書式はcol-{breakpoing}-{columns}です。ブレイクポイントかコラム数のどちらかを設定しないこともできます。

ブレイクポイントはスマホタブレット、PCをターゲットにいくつか選択肢がありますが、画面の横幅がタブレット以上かどうかで分けられるmdを選べばいいと思います。colクラスはブレイクポイントごとに追加できるので、問題点がでてきたら他のものを追加で指定すればいいと思います。

コラム数は、colクラスの横幅をcontainerクラスの要素もしくはcontainer-fluidクラスの要素の横幅に対し、12等分した幅のうちどのくらいの大きさにするか決められます。この幅は、ブラウザの横幅と連動して変化します。1にすれば最小幅になるし、12にすれば最大幅になります。

colクラスのオプションを指定した例が下のものです。

<div class="container"> 
  <div class="row">
    <div class="col-md-2">Column1</div>
    <div class="col-md-7">Column2</div>
    <div class="col-md-3">Column3</div>
  </div>
<div class="row">
    <div class="col-md-2">Column4</div>
    <div class="col-md-6">Column5</div>
  </div>
</div>

Horizontal alignment

rowクラスの要素のブロックを中央寄せにできます。rowクラスが入っている要素にjustify-content-centerクラスを追加すれば中央寄せになります。右寄せや左寄せなどもあります。

Nesting

colクラスの要素の中に、別のrowクラスの要素を入れることができます。