【メモ書き】Djangoのmodelクラスを定義する時に、__unicode__が必要な意義
背景
Djangoの練習でブログを作ってるんですが、以下のようなモデルを教科書に従って定義した。その時unicodeのところの意義がいまいち分からなかったのでまとめ
class Blog(models.Model):
title = models.CharField(max_length=100, unique=True)
slug = models.SlugField(max_length=100, unique =True)
body = models.TextField()
posted = models.DateField(db_index=True,auto_now_add=True)
category = models.ForeignKey('blog.Category')
def __unicode__(self):
return '%s' % self.title
unicodeとは?
多くの人が知っている(らしい)のですが、もちろん初心者の僕は知りません。僕は自称「ググるカス」なので、カスはカスらしくググりました。
unicodeは何百万種類もある言語をコンピューターで統一的に扱うための手段の1つ。
コンピューターが自然言語を理解するための方法はたくさんあって、例を出すと、
- utf8
- ASCII
とからしい。
で、これらの方法ではencodeっていうコンピューターが理解できるための1工夫みたいなのをしているんだけど、どうもそれがそれぞれの方法によって違うらしい。
で、もちろん普通のpythonで文字列を扱えばencodeされるんだけど、webで読む人のバックグラウンドがたくさんあって、しかもそれぞれ異なる方法を使ってコンピューターと自然言語でやりとりが行われているので、読む人の環境によってめちゃくちゃなことになるらしい。
もう少し詳しく
例えば、文字AをASCIIによってencodeしてコンピューターで保管しておくとする。そんで、呼び出す人の環境がutf-8の場合どうなるのかを考えてみる。
文字A → ASCII → 文字コード = 123456
といったコードで保存されているとする。
で、呼び出す人の環境がutf-8だとすると、、、
文字コード = 123456 → utf-8 → 文字B
といった感じで異なる文字列が帰ってくる。もじくは同一の文字列が存在しなくって、webページ全体が??????????????ってなったりする。
unicodeの問題点とは?
ここまで来て「全ての文字コードをunicodeで扱えばいいじゃん?」と思ったんだけど、そこまで世の中都合よくいかないらしい。天は2物を与えるときもあるだろうけど、どうやら人間の世界はいつもトレードオフっぽい。
unicodeはコンピューターにとっての統一規格である能力を得たかわりに、人間に見せるための機能を放棄した
っぽい。というか、そうじゃなければ辻褄が合わないので、暫定そうやって理解しておくことにした。(なのでタイトルがメモ書きなのです。)
Djangoでは文字コードはどのように扱われている?
Djangoに話を戻す。
Djangoでは、framework内では全ての情報がunicodeでやりとりされているようだ。で、unicodeは人間に見せる際に少しサボるので、そこを修正してあげるために、modelのところに unicodeと書く必要があるんだとか。
とりあえず、突っ込みどころ満載な状況で記事が終わっているんだけど、そこはとりあえず1段落して前に進むことにする。
知るべき必要のあることはいずれわかる(はず)
Author And Source
この問題について(【メモ書き】Djangoのmodelクラスを定義する時に、__unicode__が必要な意義), 我々は、より多くの情報をここで見つけました https://qiita.com/u_kan/items/c3ba9a19ca4911f42818著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .