Django + semantic UI で作成しているサイトにPCで接続するとうまくいくのですが、モバイルデバイスから接続すると期待通りの表示ができていませんでした。そこで、モバイルデバイスからのアクセスの場合、テンプレートを切り替えるという方針にすることにしました。そこで、なるべくmiddlewareを使わずにしたいとおもい、しらべたところ、pythonそのものにuser_agentを識別できるパッケージ user_agents があったので、これをインストールしたところ、テンプレートを切り替えたので、その時のメモです。
まず、最初にユーザーエージェントを切り替えるためのpython パッケージ user_agentsをインストールします。
追記2011/01/23:contextとしてuser_agentを渡した場合、template側でもis_mobileの参照ができました。
まず、最初にユーザーエージェントを切り替えるためのpython パッケージ user_agentsをインストールします。
# pip の場合 pip install user_agents # deb パッケージの場合 apt-get install python3-user-agentsつづいて、viewを編集します。要点だけですが、以下のようにしました。
from user_agents import parse
(中略)
def get_template_names(self):
ua_str = self.request.META["HTTP_USER_AGENT"]
ua_res = user_agents.parse(ua_str)
if ua_res.is_mobile:
return ['motherboard/top.m.html']
else:
return ['motherboard/top.html']
上述の場合、表題通りdjangoのsettings.pyを編集する必要はありませんでした。簡単ですが今回は以上です。それでは。追記2011/01/23:contextとしてuser_agentを渡した場合、template側でもis_mobileの参照ができました。
# views.py
...
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
ua_str = self.request.META["HTTP_USER_AGENT"]
ua_res = user_agents.parse(ua_str)
context['user_agent'] = ua_res
...
テンプレート側
{% if user_agent.is_mobile %}
blah, blah, blah...
{% else %}
hoge, hoge, hoge...
{% endif %}
コメント
コメントを投稿