“2012/09”な記事

DjangoさんのClass-based generic viewsで使える気がするpjax対応のMixin。link

 Class-based generic views | Django documentation | Django
 defunkt/jquery-pjax

 以前、Djangoさんのview関数(と言っておけばいいのかな)で使える気がするpjaxによるアクセスかどうかを班別するdecoratorみたいなのを書いたのですが(例のあれ(仮題)- pjaxによるアクセスかどうかを判別するdocorator、Djangoさんの話です。)、その流れで、今度はClass-based viewで使える気がするMixinを書いてみました。

 と言っても、例によって書いたのは随分と前の話でありまして、この夏の終わりにまだまだ寒かった頃の事を思い出しながらのネタ出し、かつその後ほったらかしなのでもっと上手い方法があるんじゃないか疑惑満載でございます。

from django.views.generic.base import TemplateResponseMixin

class PjaxTemplateResponseMixin(TemplateResponseMixin):

    def get_template_names(self):
        templates = TemplateResponseMixin.get_template_names(self)
        if self.is_pjax:
            templates[0] = '_pjax.'.join(templates[0].rsplit('.', 1))
        return templates

    @property
    def is_pjax(self):
        return 'HTTP_X_PJAX' in self.request.META

    @property
    def pjax_container(self):
        if self.is_pjax:
            return self.request.META['HTTP_X_PJAX_CONTAINER']
        return None

 仕組みとしては前回同様pjaxアクセスだったらテンプレート名を_pjax付きに変換して返すので、その_pjax付きのテンプレートは事前に用意しておくというもの。おまけでpjaxアクセスか判別するのと、jQuery-pjax側が一応ヘッダーに含めて送ってくれるPjax用コンテナ名のプロパティも付けておきました。

 get_template_names()が返すのは配列なので複数のテンプレート名を含まなければいけないケースも出てくるのかと思うのだけど、今のところ必要となっていないし、そもそも私がどうして配列なのかすらわかってないので普通に一つだけ返しています。まぁ、適当に適当で。

 あとはお使いのClass-based generic viewとかでMixinしていただければよしなにしてくれるはずですよ、大した事してないし。

無料で使えてしまっているIE確認用仮想環境、ievms。link

 xdissent/ievms

 ついうっかりWeb屋さんみたいなものになんちゃって復帰をしている雰囲気を醸し出しているのですけども、私みたいなMacオンリーユーザーなエセWeb屋さんにとって大敵なのはIEさんでの動作確認ですよ。一つのバージョンだけでよければまだいいですが、複数の、しかもかなり以前のバージョンでの確認を強いられたりすると、その確認環境を用意するだけでもしんどいです。

 他のブラウザでは基本的に後方互換といいますか、対応しているいないを気にして制作を進めていけばだいたい大丈夫なのですけど、IEさんはバージョン毎にダイナミックに挙動が違っていたりして、そこそこちゃんと確認してあげなければいけません。まぁ、IEさん以外のブラウザの過去バージョンの普及度なんて無視していいくらいだから平気なんだよ、とか言われるとうんざりするぐらい反論できないのでIEさんだけが悪いとも言えないと思ったりします。

 そんなことは当のmicrosoftさんも百も承知のご様子で各バージョン毎の検証用の仮想イメージを配布しています。でも、これ、自社製品であるところのVirtual PC用なのですよね。ところがこちとらMacユーザーですからVirtual PCが動きません。もともとVirtual PCっていうのはMac用のアプリだったはずなのに、とか懐古的な事を言ってみてももはやどうにもなりません。

 そんなボクらを救うべく存在しているのが件のスクリプトです。Virtual PC用のイメージをVirtualBoxで使えるように変換してくれます。VirtualBoxというのはOracleさんから無償で提供されているものですから、あら不思議、全て無償で手に入ります。ライセンス的にもIEで動作確認だけしていれば満たしている感じなので問題ないという見解だそうです。アクティベーションもできないしね。

 肝心のIEさんのバージョンも、6、7、8、9と全てを満たしています。ただ、仮想イメージとはいえこれらは共存できないので別のイメージになってしまうので、結構な大きさのディスクスペースを要求されます、数十GB単位です。私は自宅の環境には全てのバージョンを入れてみましたが、Airさんの方には全てをインストールする事はかなわず、7以降にしました。それでもそれなりな容量……、きついです。

 とはいえ、これで実機がなくともIEさんでの動作確認が取れるのですから非常に助かります。実際助かってます。ディスクスペースに余裕のある方、お困りの方はこじ開けてでも試してみてはいかがでしょうか。