Kayのテンプレートでエンコードを操作


Kayのテンプレートでてっとり早く携帯キャリアを特定する方法を試しました。

※実運用ではkay-jpmobileやuamobileを使うほうがいいと思います。


やることは2つ。

  1. アクセス元の端末情報(PCや携帯、ブラウザ情報)を取得する
  2. 端末に合わせてエンコーディングを変更する

なので、

  1. viewの中でUser Agentを取得する
  2. テンプレートエンジン内でif分を使ってヘッダー情報を変更する


でできるんじゃないか、と思いダメもとでやってみたらできてしまいました。


viewの一部

def index(request):
  machine = str(request.user_agent)
  if "KDDI" in machine:
    encoding_class = "au"
  else:
    encoding_class = "other"
  return render_to_response('myapp/index.html',
                            {"encoding_class": encoding_class})


index.htmlの一部

<html>
<head>
{% if encoding_class == "au" %}
  <meta http-equiv="Content-Type" content="application/xhtml+xml;charset=Shift_JIS">
{% else %}
  <meta http-equiv="Content-Type" content="application/xhtml+xml;charset=UTF-8">
{% endif %}

<title>test</title>
</head>
<body>
  <p>{{ data  }}</p>
  {% if encoding_class == "au" %}
    <p>SHIFT-JIS</p>
  {% else %}
    <p>UTF-8</p>
  {% endif %}
</boday>
</html>


テストはFirefoxFireMobileSimulatorで行いましたが、無事auからのアクセスのみエンコーディングをSHIFT-JISにすることが出来ました。