スポンサーサイト

0

    一定期間更新がないため広告を表示しています


    • 2014.12.23 Tuesday
    • -
    • -
    • -
    • -
    • -
    • by スポンサードリンク

    久しぶりにsymfonyを触ると…(汗

    0
      今日は久しぶりにsymfonyを触っています。
      というのも。
      ・ajaxを大量に使うフォームを扱う
      ・管理画面よりユーザ画面でCRUDをさせる目的(というかぶっちゃけ管理画面は無くてもいい)
      ・ユーザは基本的にビジネスユーザなので多少速度が遅くてもOK
      という理由で、symfonyを使ったシステムを組んでるから^^;

      ホントはdjangoでチャレンジしてもよかったんだけど、鯖がpython未セットアップの鯖なので、色々SSHでインスコ作業が発生するのが面倒なので、約2ヶ月ぶり?にsymfonyを使うことにしました。
      #rachoに触ってみようかな?と思ったんですが、締め切りが短い案件なので学習時間がもったいなくて。

      init-appじゃなくてstartappと打って「コマンド違うよ!」と怒られ(爆
      schema.yml書いてるのに、カラム名とオプションの間を「:」じゃなくて「=」でつないでたり(爆
      処理の最後に「;」忘れたり(爆
      その他もろもろ。
      朝から今まで色々やらかしました^^;

      それでもこれでもPHPベタ書きよりは速いです。格段に。

      今抱えてるプロジェクト(何と今5つも持ってます><)が片付いたら、ようやく1.0RC1が出たZendFrameworkに触ってみようかな^^




      日本語テキストをtruncate@django(Python全般にも??)

      0
        最近すっかりPHP&symfonyを捨ててdjangoばかり使ってます(汗

        さて、仕事(一応プログラマではなくWEB屋でっす^^;)柄、主に完パケ納品できるCMS・ブログ系を作ることを念頭においてdjangoをあれこれ触ってるわけですが、そうすると必然的に「コンテンツの概要」を表示して「続きを読む」ってやつをやりたいわけです。そう、MovableTypeにもあるアレ。


        もとのテキストが英語(に限らず、シングルバイト文字のみの言語)なら話は簡単です。
        何語で区切る・何文字で区切るってのが間違いようがないので。
        事実、djangoの組み込みフィルタにもありますよね<truncatewords

        ところが、日本語(に限らず、マルチバイト文字を使う言語)だと、単純に「何文字」で区切ると、ひとつの文字の途中で切られてしまうことがありえます。
        これがあまりパソコンに詳しくないクライアントに見つかると、「文字化け!文字化け!早くなんとかして!」と大騒ぎして電話がかかってくるのでもう大変(爆

        その点、MovableTypeの概要(MTEntryExcerpt)は変なところで切れたのを見たことが無いので、何かうまいことやってるんだと思うんです。つまり、方法はある!ということ。

        本来であれば、この時点でMovaleTypeのコード読みをして(Perlキラーイだけど。泣)、どうやって日本語でtruncate処理をしているのか解明してみるべきなんでしょう。
        が、やはりPerl苦手の私がPerlのコード読みをするとハマる可能性が高いこと(恥)、まとまった勉強時間が取れないこと、から判断して、簡易truncate処理を考え付きました。

        使うのは例によってカスタムフィルタです。(←最近こればっかり。汗)
        myproject > myapp > templatetags > truncate.py


        from django import template
        import string
        register = template.Library()

        @register.filter
        def truncate_first_break(value):
        list = value.rsplit("¥n")
        str = list.pop(0)
        return str

        @register.filter
        def truncate_second_break(value):
        list = value.rsplit("¥n")
        str = list.pop(0) + list.pop(1)
        return str


        ハイ、なんとも原始的でお粗末です。
        スミマセン。

        まず、日本語の文章を書いていると「改行」というのは一まとまりの文章の区切りになりやすいということに着目しました。(これが文系出身の強み?)

        そこで、生のテキストをフィルタが受け取ったら(value)、それを¥n(改行コード)で切ります(rsplit("¥n"))。
        区切られたテキストをpop()で取ってきて、テキスト内の最初の改行まで(上記truncate_first_break)又はテキスト内の2番目の改行まで(上記truncate_second_break)だけを返します。

        すると…

        「1番目の改行はここです→
        2番目の改行はココです→
        3番目の改行はありません」
        という文章がobject.bodyに入っているとして、
        テンプレートに
        {{ object.body|truncate_first_break }}...<a href="{{ object.get_absolute_url }}">続きを読む</a>
        と書けば
        「1番目の改行はここです→...続きを読む」
        という表示ができますし、

        テンプレートに
        {{ object.body|truncate_second_break }}...<a href="{{ object.get_absolute_url }}">続きを読む</a>
        と書けば
        「1番目の改行はここです→2番目の改行はココです→...続きを読む」
        という表示ができます。


        力不足のため「何文字」と指定して切る方法はまだ思いつきませんが(汗
        これで結構代用がききそうな気がしませんか(^−^)
        「何文字以内」で良いのであれば、list.popをループで廻して、strの文字数が指定文字数を超えない範囲で止めれば近いことは実現できそうです♪


        djangoテンプレート上でmodelのメソッドに引数を渡す方法(djangoで出勤簿アプリ試作中♪)

        0
          久しぶりの更新^^;;
          GW明けに至急の仕事と打ち合わせが立て続けに入って、なかなかdjangoの研究(?)が進められませんでした。

          さて、昨日ようやく仕事が一段落ついた(納品物にOKもらって、請求書送付!)ので、突然の思いつきでdjangoで出勤簿アプリを作ってみることにしました。
          「出勤簿」、現在私はどこにも出勤せず自宅で仕事をしているので不要なんですが、昔(と言っても6年前)、学生時代のバイト先で、Excelフォーマットに手入力・手計算→→出勤・退勤時間だけ入力すれば後はExcel関数&マクロで自動計算に改造して、感謝された思い出のあるアプリです。
          完成度が高いものができれば、小規模事業所にWEBとセットで売れないかな?という魂胆もあり^^;挑戦してみました。

          modelは単純。
          ■社員…氏名(Char)・所属(Charにchoicesを設定)・退職者か?(Boolean)
          ■出退勤データ…どの社員のデータか?(社員のForeignKey)・日付(Date)・出勤時間(Time)・退勤時間(Time)・勤務時数(Time)・備考(Text)

          機能は、ひとまず
          ・社員1人1人のタイムカードを入力(←contrib.adminで)
          ・社員1人1人の月次集計表示「Aさんは○月、何時間働いたかな?」
          ・所属ごとの月次集計表示「Z部の皆さん(Aさん・Bさん・Cさん)は○月、それぞれ何時間働いたかな?」
          だけ。

          modelで変わった設定した部分。
          ・社員にカスタムマネジャ設定。退職者を除く社員リスト取得用。
          ・出退勤データのsaveをオーバーライド。


          model Data(models.Model):
          …(中略)…
          def save(self):
          import datetime
          delta_start_time = datetime.timedelta(
          hours=self.start_time.hour,minutes=self.start_time.minute)
          delta_end_time = datetime.timedelta(
          hours=self.end_time.hour,minutes=self.end_time.minute)
          self.hours=delta_end_time - delta_start_time


          ※時数計算の部分は「python time calculation」でぐぐって見つけた海外のpython MLから、timedeltaを使えばいいとわかったので、timedeltaを使って計算しています。

          さて、後はおなじみの、
          syncdb

          urls書き

          views書き書き(今回の件に関してgeneric viewを使う方法は思いつかなかった)

          テンプレートHTML書き


          で。
          ここまで来てハタと気づく。


          djangoで更新Ping送信

          0
            常山さんが私のために(違)資料を集めて下さったようなので(大違)^^;
            http://d.hatena.ne.jp/johzan/20070430/1177901133

            珍しく、至急のコーディング案件が入ってきちゃってGW中は忙しいので><
            GW明けにやってみたいと思います♪
            常山さん、どうもありがとうございますm(_ _)m
            それだけ。

            他に調べる(やりたい)ことメモ:
            ■トラックバックの送受信方法
            XMLRPCの基本から勉強しなおさないとだめかも…挫折しそう…
            ■管理画面で一般(スーパーユーザじゃない)ユーザに関して、オブジェクトsave時に「現在のユーザ」を取得する方法。
            つまり、誰がオブジェクトを編集したかをDBに一緒に記録する方法。セッションから取るんだろうけど…やり方がわからん)
            ■django.contrib.auth.modelsのUserにないユーザ属性を扱う方法
            多分、別のテーブルを作ってそこからForeignKeyでUserと結べばいいのかな?と思ったんだけど、現在1対1リレーションのドキュメントが無いので(本家も「まもなく変更」しか書いてねぇ)
            1対多で無理やり取って来るのか、Managerをオーバーライドすればいいのか??


            おやすみなさい。


            1

            PR

            calendar

            S M T W T F S
              12345
            6789101112
            13141516171819
            20212223242526
            2728293031  
            << May 2007 >>

            twitter

            selected entries

            categories

            archives

            recent comment

            • djangoテンプレート上でmodelのメソッドに引数を渡す方法(djangoで出勤簿アプリ試作中♪)
              GavannITサービス-なりとみ
            • 私がそれでも名古屋市に住み続ける理由を6つにまとめてみた!
              bose wireless speaker
            • FastCGIでdjango…400エラー???
              levi's
            • さくらインターネットdjangoが突然500エラー!?(Pythonバージョンアップされてた
              salomon running shoes
            • 私がそれでも名古屋市に住み続ける理由を6つにまとめてみた!
              louboutin shoes
            • FastCGIでdjango…400エラー???
              yeezy boost 350
            • さくらインターネットdjangoが突然500エラー!?(Pythonバージョンアップされてた
              jordan 11
            • Silexでエラーページをカスタマイズする方法 : Symfony Advent Calendar 2011 - day 12
              pandora jewelry
            • django対symfony 日本語メール送信(その1 symfony編)
              nike air vapormax
            • 解決!XREAでCGI版Pythonを使ってdjangoを動かす(人柱?)
              kate spade

            recent trackback

            • HTMLの表(TABLE)のセル(TD)に斜線を引くjavascriptライブラリ slash.js 作っちゃいました
              常山日記
            • django対symfony 日本語メール送信(その1 symfony編)
              CPA-LABテクニカル
            • CodeIgniterでユーザー認証
              されどLAMPな日々
            • 久々にdjangoを最新版にしたらHTMLがエスケープされちゃった!!(解決済み)
              常山日記
            • FastCGIを諦めてmod_pythonを使う。Apacheのアップグレード
              サーバー用語集
            • さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ
              常山日記
            • さくらインターネット スタンダードプランでdjango使ってる方、DBは?
              mitszoの日記
            • python多次元リストをsort(並べ替え)する方法?
              mitszoの日記
            • フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)
              Humming Via Kitchen
            • 日本語テキストをtruncate@django(Python全般にも??)
              常山日記

            recommend

            links

            profile

            search this site.

            others

            mobile

            qrcode

            powered

            無料ブログ作成サービス JUGEM