| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「Django APIs」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
1行目: 1行目:
==Django APIs==
+
==[[Django APIs]]==
 
[[Django]] | [[Python]] |  
 
[[Django]] | [[Python]] |  
 
*http://docs.djangoproject.com/en/dev/
 
*http://docs.djangoproject.com/en/dev/
6行目: 6行目:
 
===shortcut===
 
===shortcut===
 
====render_to_response====
 
====render_to_response====
*テンプレートとともにコンテキスト辞書を与えると、テキストが描画されたHttpResponseオブジェクトを返す
+
*テンプレートとともにコンテキスト辞書を与えると、テキストが描画されたHttp[[R]]esponseオブジェクトを返す
 
  render_to_response(template[, dictionary][, context_instance][, mimetype])  
 
  render_to_response(template[, dictionary][, context_instance][, mimetype])  
  
19行目: 19行目:
 
====Field.choices====
 
====Field.choices====
 
*選択フィールドとして、2 要素を持つタプルの繰り返しを利用する。
 
*選択フィールドとして、2 要素を持つタプルの繰り返しを利用する。
*Django admin は、このオプションが与えら得れた場合、テキストフィールドの変わりにセレクトボックスを利用する。
+
*[[Django]] admin は、このオプションが与えら得れた場合、テキストフィールドの変わりにセレクトボックスを利用する。
 
  from django.db import models
 
  from django.db import models
 
  class MyModel1(models.Model):
 
  class MyModel1(models.Model):
28行目: 28行目:
 
*データベースのカラム名を指定する。指定しない場合、フィールド名を使用する。
 
*データベースのカラム名を指定する。指定しない場合、フィールド名を使用する。
 
====Field.db_index====
 
====Field.db_index====
*True に設定した場合、以下のようにCREATE INDEX 文を出力できる。
+
*True に設定した場合、以下のようにC[[R]]EATE INDEX 文を出力できる。
 
  C:\work\py\django\mysite>python manage.py sqlindexes myapp1
 
  C:\work\py\django\mysite>python manage.py sqlindexes myapp1
 
  BEGIN;
 
  BEGIN;
  CREATE INDEX "myapp1_mymodel1_field1" ON "myapp1_mymodel1" ("field1");
+
  C[[R]]EATE INDEX "myapp1_mymodel1_field1" ON "myapp1_mymodel1" ("field1");
  COMMIT;
+
  [[COM]]MIT;
 
====Field.db_tablespace====
 
====Field.db_tablespace====
 
*フィールドにインデックスを張る場合に使用するテーブルスペースを指定。
 
*フィールドにインデックスを張る場合に使用するテーブルスペースを指定。
63行目: 63行目:
 
|False
 
|False
 
|-
 
|-
|値の正規化
+
|値の[[正規化]]
 
| True or False
 
| True or False
 
|-
 
|-
74行目: 74行目:
 
|}
 
|}
 
=====例=====
 
=====例=====
  from django.http import HttpResponse
+
  from django.http import Http[[R]]esponse
 
  from django.template import Context, loader
 
  from django.template import Context, loader
 
  from django.forms import *
 
  from django.forms import *
101行目: 101行目:
 
====EmailField====
 
====EmailField====
 
====FileField====
 
====FileField====
*Django Fileアップロード例
+
*[[Django Fileアップロード例]]
 
====FilePathField====
 
====FilePathField====
 
====FloatField====
 
====FloatField====
114行目: 114行目:
 
====TextField====
 
====TextField====
 
====TimeField====
 
====TimeField====
====URLField====
+
====U[[R]]LField====
====XMLField====
+
====[[XML]]Field====
  
 
==Forms==
 
==Forms==
133行目: 133行目:
 
|'' (空文字)
 
|'' (空文字)
 
|-
 
|-
|値の正規化
+
|値の[[正規化]]
 
|ユニコードオブジェクト
 
|ユニコードオブジェクト
 
|-
 
|-
157行目: 157行目:
 
  <form action='/hogehoge/' method='POST'>
 
  <form action='/hogehoge/' method='POST'>
 
   {% if form %}
 
   {% if form %}
   BAR:{{form.bar}}
+
   BA[[R]]:{{form.bar}}
 
   {% endif %}
 
   {% endif %}
 
====TypedChoiceField====
 
====TypedChoiceField====
172行目: 172行目:
 
====MultipleChoiceField====
 
====MultipleChoiceField====
 
====NullBooleanField====
 
====NullBooleanField====
====RegexField====
+
====[[R]]egexField====
 
====TimeField====
 
====TimeField====
====URLField====
+
====U[[R]]LField====
  
 
===Built-in widgets===
 
===Built-in widgets===
194行目: 194行目:
 
====NullBooleanSelect====
 
====NullBooleanSelect====
 
====SelectMultiple====
 
====SelectMultiple====
====RadioSelect====
+
====[[R]]adioSelect====
 
====CheckboxSelectMultiple====
 
====CheckboxSelectMultiple====
 
====MultiWidget====
 
====MultiWidget====
237行目: 237行目:
  
 
=====配列の各要素をループする。=====
 
=====配列の各要素をループする。=====
*views.py
+
*[[vi]]ews.py
 
  def index(request):
 
  def index(request):
 
     ctx = {}
 
     ctx = {}
253行目: 253行目:
 
=====アイテムを繰り返し処理する=====
 
=====アイテムを繰り返し処理する=====
 
  {% for itm in item_list %}
 
  {% for itm in item_list %}
   <a href="{{itm.detailPageURL}}"><img src="{{itm.smallImageURL}}"/></a>  
+
   <a href="{{itm.detailPageU[[R]]L}}"><img src="{{itm.smallImageU[[R]]L}}"/></a>  
 
   {% endfor %}
 
   {% endfor %}
  
278行目: 278行目:
 
=====基底=====
 
=====基底=====
 
*派生でオーバーライドする箇所を、block [名前] ~ endblock で作成
 
*派生でオーバーライドする箇所を、block [名前] ~ endblock で作成
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
  <!DOCTYPE html PUBLIC "-//W3C//DTD [[HTML]] 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 
  <html>
 
  <html>
 
  <head>
 
  <head>
304行目: 304行目:
 
  {% endblock %}
 
  {% endblock %}
  
===HTMLをそのまま出力する===
+
===[[HTML]]をそのまま出力する===
 
*|safeとする
 
*|safeとする
 
  {{digest.summary|safe}}
 
  {{digest.summary|safe}}
326行目: 326行目:
 
  {{ value|striptags }}
 
  {{ value|striptags }}
  
====divisibleby====
+
====di[[vi]]sibleby====
 
*値が引数で割り切れるかどうか判定。割り切れれば True
 
*値が引数で割り切れるかどうか判定。割り切れれば True
 
*mod 演算の代替として使える
 
*mod 演算の代替として使える
335行目: 335行目:
 
     <td align='right'>{{ num }}</td>
 
     <td align='right'>{{ num }}</td>
 
     <td><input type='text' size='6'></td>
 
     <td><input type='text' size='6'></td>
     {% if num|divisibleby:"4" %}
+
     {% if num|di[[vi]]sibleby:"4" %}
 
     </tr><tr>  
 
     </tr><tr>  
 
     {% endif %}
 
     {% endif %}

2020年2月16日 (日) 04:24時点における最新版

目次

Django APIs

Django | Python |

View レイヤー

shortcut

render_to_response

  • テンプレートとともにコンテキスト辞書を与えると、テキストが描画されたHttpResponseオブジェクトを返す
render_to_response(template[, dictionary][, context_instance][, mimetype]) 

Model レイヤー

Field オプション

Field.null

  • True に設定すると、エンプティ値をNULLとしてデータベースに格納する。
  • デフォルトはFalse

Field.blank

  • True に設定すると、ブランク値が許容される。デフォルトはFalse。
  • 純粋にデータベースの問題である、null オプションとは異なり、値の妥当性検査に関係する。Falseの場合、入力必須となる。

Field.choices

  • 選択フィールドとして、2 要素を持つタプルの繰り返しを利用する。
  • Django admin は、このオプションが与えら得れた場合、テキストフィールドの変わりにセレクトボックスを利用する。
from django.db import models
class MyModel1(models.Model):
    WEEK_CHOICES = (('0','Sun'),('1','Mon'),('2','Tue'),('3','Wed'),('4','Thu'),('5','Fri'),('6','Sat'))
    week = models.CharField(max_length=1, choices=WEEK_CHOICES)

Field.db_column

  • データベースのカラム名を指定する。指定しない場合、フィールド名を使用する。

Field.db_index

  • True に設定した場合、以下のようにCREATE INDEX 文を出力できる。
C:\work\py\django\mysite>python manage.py sqlindexes myapp1
BEGIN;
CREATE INDEX "myapp1_mymodel1_field1" ON "myapp1_mymodel1" ("field1");
COMMIT;

Field.db_tablespace

  • フィールドにインデックスを張る場合に使用するテーブルスペースを指定。
  • デフォルトは、DEFAULT_INDEX_TABLESPACE セッティング
  • バックエンドがサポートしない場合は無視される。

Field.default

  • フィールドのデフォルト値
  • 呼び出し可能オブジェクトを指定することもできる。その場合、呼ばれるたびに新規オブジェクトが作成される。

Field.editable

  • False に設定すると、モデルクラスから自動的に生成される、admin もしくは forms においてフィールドは編集不可になる。

Field.help_text

Field.unique

Field.unique_for_date

Field.unique_for_month

Field.verbose_name

Field タイプ

AutoField

  • 自動的に有効なIDをインクリメントして取得する IntegerField 。
  • 主キーフィールドはモデルに暗黙的に追加され、AutoFieldとなるため、通常は直接使用する必要はない。
  • save メソッドを呼び出すまでは None

BooleanField

項目
デフォルトWidget CheckboxInput
未設定時 False
値の正規化 True or False
バリデーション チェックがONの場合True
エラーメッセージのKey required
from django.http import HttpResponse
from django.template import Context, loader
from django.forms import *

def index(request):
    t = loader.get_template('foobar/index.html')
    form = None
    result = 
    if request.method == 'POST':
        form = HogeForm(request.POST)
        if form:
            if form.is_valid():
                pass
           (略)
    
class HogeForm(Form):
    is_foo = BooleanField(required=False)
【注意】required=False

<blockquote>Field の派生クラスは、バリデーションの設定が、required=Trueだが、required=False としないと、チェックONでない場合、form.is_valid()が失敗してしまう。</blockquote>

CharField

CommaSeparatedIntegerField

DateField

DateTimeField

DecimalField

EmailField

FileField

FilePathField

FloatField

ImageField

IntegerField

IPAddressField

NullBooleanField

PositiveIntegerField

PositiveSmallIntegerField

SlugField

SmallIntegerField

TextField

TimeField

URLField

XMLField

Forms

Built-in Field

BooleanField

CharField

ChoiceField

項目
デフォルトWidget Select
未設定時 (空文字)
値の正規化 ユニコードオブジェクト
バリデーション リストの値に存在
エラーメッセージのKey required、invalid_choice
使用例
  • Form
from django.forms import *

class FooForm(Form):
    CHOICE_LIST = (('01','ham'),('02','spam'))
    bar = CharField(widget=Select(choices=CHOICE_LIST))

    def conv(self, data):    
        choiced = self.cleaned_data['bar']
               :
  • テンプレート
<form action='/hogehoge/' method='POST'>
  {% if form %}
  BAR:テンプレート:Form.bar
  {% endif %}

TypedChoiceField

DateField

DateTimeField

DecimalField

EmailField

FileField

FilePathField

FloatField

ImageField

IntegerField

IPAddressField

MultipleChoiceField

NullBooleanField

RegexField

TimeField

URLField

Built-in widgets

TextInput

PasswordInput

HiddenInput

MultipleHiddenInput

FileInput

DateInput

DateTimeInput

TimeInput

Textarea

行列を指定する例
from django.forms import *
class HogeForm(Form):
    data = CharField(widget=Textarea(attrs=dict(rows='40', cols='50')))

CheckboxInput

Select

NullBooleanSelect

SelectMultiple

RadioSelect

CheckboxSelectMultiple

MultiWidget

SplitDateTimeWidget

SelectDateWidget

Template レイヤー

タグ

変数

  • 変数は、{{ variable }} のように記述する。
  • ピリオド"." で、変数の属性を参照できる。

for

forループの中で利用できる変数
変数 内容
forloop.counter 1 から始まるカウンタの現在位置
forloop.counter0 0 から始まるカウンタの現在位置
forloop.revcounter 1 から始まり最後から現在していくカウンタの現在位置
forloop.revcounter0 0 から始まり最後から現在していくカウンタの現在位置
forloop.first 繰り返し最初の要素の場合True
forloop.last 繰り返し最後の要素の場合True
forloop.parentloop ネストしたループの場合、親ループの現在の値を参照
配列の各要素をループする。
def index(request):
    ctx = {}
    ctx['rows'] = range(1,4,1)
    return render_to_response('test/index.html', ctx)
  • index.html
<table>
  {% for i in rows %}
  <tr><td>テンプレート:I</td><td><input type="text"></td></tr>
  {% endfor %}
</table>
  • 結果

0383 django template tag for01.jpg

アイテムを繰り返し処理する
{% for itm in item_list %}
  <a href="{{itm.detailPageURL}}"><img src="{{itm.smallImageURL}}"/></a> 
 {% endfor %}

if と else

  • 変数を評価し、変数が true なら ブロックを表示する
{% if rows %}
  rows size : テンプレート:Rows.
{% else %}
  no rows.
{% endif %}
結果

0384 django template tag if01.jpg


ifequal

  • 2 つの引数が等しい場合にブロックを出力する。
{% ifequal style 'text' %}
  <div>
    スタイル変数が 'text' の場合このブロックを出力
  </div>
{% endifequal %}

テンプレートの継承

基底
  • 派生でオーバーライドする箇所を、block [名前] ~ endblock で作成
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  {% block html_header %}
  {% endblock %}
</head>
<body>
  {% block content %}
  {% endblock %}
</body>
</html>
派生
  • 基底ファイルを extends で指定
  • オーバーライドする箇所を block [名前] ~ endblock で記述
{% extends "base.html" %}
{% block html_header %}
  <script type="text/javascript"><!-- 
  //--></script>
  <title>Title</title>
{% endblock %}
{% block content %}
  Content
{% endblock %}

HTMLをそのまま出力する

  • |safeとする
テンプレート:Digest.summary

フィルター

default

  • 変数が、false か 空の場合、デフォルトを表示する。そうでない場合は、変数の値を表示する。
テンプレート:Value

length

  • 長さを返す。
テンプレート:Value

striptags

  • タグを除いた値を返す。
テンプレート:Value

divisibleby

  • 値が引数で割り切れるかどうか判定。割り切れれば True
  • mod 演算の代替として使える
<table>
  <tr>
  {% for num in numlist %}
    <td align='right'>テンプレート:Num</td>
    <td><input type='text' size='6'></td>
    {% if num|divisibleby:"4" %}
    </tr><tr> 
    {% endif %}
  {% endfor %}
  </tr>
</table>
結果

0382 django template tag div01.jpg

Forms