Django Python 漢字・ひらがな・カタカナをローマ字に変換する~pykakasi
概要
django で、漢字・ひらがな・カタカナをローマ字に変換して、slugなどに利用したい!
参照サイト
利用方法
pip install する
pip install pykakasiだと失敗するので、githubのソースコードを直接installする。 requirementsにも同様に記載するのを忘れない。
$ pip install git+https://github.com/miurahr/pykakasi
pykakasiをpython shellで試してみる。
from pykakasi import kakasi kakasi = kakasi() kakasi.setMode('H', 'a') kakasi.setMode('K', 'a') kakasi.setMode('J', 'a') conv = kakasi.getConverter() conv.do('利用方法がわかるkkk') 'riyouhouhougawakarukkk'
という感じで設定できる。
公式の設定方法はこちら
import pykakasi.kakasi as kakasi kakasi = kakasi() kakasi.setMode("H","a") # default: Hiragana no convert kakasi.setMode("K","a") # default: Katakana no convert kakasi.setMode("J","a") # default: Japanese no convert kakasi.setMode("E","a") # default: Symbols no convert kakasi.setMode("r","Hepburn") # default: use Hepburn Roman table kakasi.setMode("s", True) # separate, default: no Separator kakasi.setMode("C", True) # capitalize default: no Capitalize conv = kakasi.getConverter() result = conv.do(text)
djangoに記載してみる ~ create slug編
prea_saveして、slugがないときに、slugを作成するfunction titleをconv.doして、全てローマ字に変換している。
def create_slug(instance, new_slug=None): title = instance.title r_title = conv.do(title) slug = slugify(r_title) if new_slug is not None: slug = new_slug qs = Classname.objects.filter(slug=slug) exists = qs.exists() if exists: new_slug = "%s-%s" %(slug, qs.first().id) return create_slug(instance, new_slug=new_slug) return slug def classname_pre_save_reciever(sender, instance, *args, **kwargs): if not instance.slug: instance.slug = create_slug(instance)
無事処理できた!次はアップロードされたfilenameで試してみる。
djangoに記載してみる ~ uploadimage編
filenameを、basenameと、file_extensionの部分に分ける。 basenameの部分をkakasiで処理してみる。
def image_upload(instance, filename): slug = instance.slug basename, file_extension = filename.split(".") basename = conv.do(basename) filename = basename + "." + file_extension return "/images/%s/%s" %(slug, filename)
無事処理完了!