牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

Django の確認フォームで localflavor を使った都道府県を templates で表示させるメモ

(django1.8, python2.7)

templetes で {{ form.prefecture.value }} と書くと 東京 とかではなく tokyo とか表示される問題。
form.get_fieldname_display とか色々やって表示されなかったので この記事 を参考に templatetags 使ってやってみた
(参考サイトのやつがそのままで動かなかったのでちょっと思考錯誤した)

hoge/forms.py

from django import forms
from localflavor.jp.jp_prefectures import JP_PREFECTURES


class HogeForm(forms.Form):
    prefecture = forms.ChoiceField(choices=JP_PREFECTURES, initial='tyokyo')

hoge/templatetags/data_verbose.py

from django import template
register = template.Library()


@register.filter
def choice_field_display(bound_field):
    value = bound_field.value()
    field = bound_field.field
    return hasattr(field, 'choices') and dict(field.choices).get(value, '') or value

templates/hoge.html

{% load data_verbose %}


<p>
  都道府県: {{ form.prefecture|choice_field_display }}
</p>

こんな感じで 東京 とか日本語で表示されるようになった。

参考

郵便番号を入力してボタンを押すと住所を補完するやつのメモ

<!doctype html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>sample</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
        <script src="https://ajaxzip3.github.io/ajaxzip3.js" charset="UTF-8"></script>
        <script>
            $(function() {
                $('.js-button').click(function(){
                    AjaxZip3.zip2addr('zip', '', 'pref', 'city');
                });
            });
        </script>
    </head>
    <body><input type="text" name="zip" size="8" maxlength="8"><button class="js-button">自動入力</button>
        <br/>
        <input type="text" name="pref">
        <br/>
        <input type="text" name="city">
    </body>
</html>

f:id:CortYuming:20161118171409p:plain

参考