2010年4月30日金曜日

GAE Python AWS:AWS の認証に引っかかる

 フツーのサイトは取ってこれるので、URLfetcher は動いている見たいなのだが、AWS というか Product Advertising API にうまくアクセスできない。プログラムがエラーを返す。

 人様のコードをサックとそのまま拝借しようという考え方が甘かったか...。

 AWS の勉強から真面目に始めよう。

2010年4月27日火曜日

GAE Aptana:ようやく雛形が動いた

 ナメてかかったら、プロジェクト生成時にインストールされる 'Hello, webapp World!'を動かすだけで2時間もかかってしまった orz。

 オイラの環境でのキモは、

・Python のバージョンは 2.5 -> 2.5.2 では動かなかった。
・dev_appserver.py に渡す root パスは、すべて文字で書いてダブルクオーテションで括る。 -> なぜか環境変数 {project_loc} は使えず。ダブルクオーテションも必須。

 あとは GAE aptana で検索して出てくるサイトの情報でいけた。

 先は長そうだ...。

2010年4月26日月曜日

GAE:久しぶりにドキュメントを読んだら

 最近ちょっと煮詰まり気味なので、久しぶりに GAE Python のスタートガイドを読んだら...、100%理解できた。

 正確にいうと「Django でいうところのアレね」という読み替えで理解した。

 意外と簡単ジャン。と、ナメてかかってプロジェクトX始動だ (^^;

2010年4月22日木曜日

django:汎用ビューの direct_to_template でちょっと嵌る

 完全に固定されたページを表示させるために、汎用ビューの direct_to_template を使おうとして少々はまる。

 django documentation には
必須の引数:

* template: 使用するテンプレートの完全な名前です。
とあったのに、例題を見てファイル名から '.html' を外してしまった。

 オフィシャルドキュメントであっても鵜呑みにしない。よく忘れるが、キモに命じておこう。

2010年4月20日火曜日

django:管理画面のカレンダーを使う方法

 form 経由はあきらめて (^^;

1.urls.py に以下を追加
(r'^my_admin/jsi18n', 'django.views.i18n.javascript_catalog'),

2.<head></head>の間に以下を挿入
<link rel="stylesheet" type="text/css" href="/media/css/forms.css"/>
<link rel="stylesheet" type="text/css" href="/media/css/base.css"/>
<link rel="stylesheet" type="text/css" href="/media/css/global.css"/>
<link rel="stylesheet" type="text/css" href="/media/css/widgets.css"/>

<script type="text/javascript" src="/my_admin/jsi18n/"></script>
<script type="text/javascript" src="/media/js/core.js"></script>
<script type="text/javascript" src="/media/js/calendar.js"></script>
<script type="text/javascript" src="/media/js/admin/DateTimeShortcuts.js"></script>

3.入力フィールドは以下のように書く。多分 class が重要。
日付<input id="id_start_date" class="vDateField" type="text" name="date" style="width:100px;height:14px;">

2010年4月19日月曜日

Django:form の使い方

 イマイチよくわからなかった form と格闘中

1.html に出力するときは、こんな感じ
class ContactForm(forms.Form):
date = DateField(widget=CalendarWidget)
name = CharField(max_length=40, widget=OtherWidget)

>>> f = ContactForm()
>>> f.media
<link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
<script type="text/javascript" src="http://media.example.com/animations.js"></script>
<script type="text/javascript" src="http://media.example.com/actions.js"></script>
<script type="text/javascript" src="http://media.example.com/whizbang.js"></script>


2.model を form にするときは、ModelForm を使うと便利

3.admin の管理画面の wedgit を自前の form で使うときの情報はこちら

2010年4月9日金曜日

Django:管理画面のテンプレートをオーバライド・その後

 管理画面のテンプレートをオーバライドして、デバッグ環境ではうまくいったのだが、デブロイしたらうまくいかない。

 どうも {% extends "admin/base_site.html" %} で継承している継承元をうまく呼び出せていないようで、崩れた形で表示される。

 あれこれやったが、結局アプリケーション単位で必要なブロックだけをオーバーライドする形でうまくいった。

 なぜ最初のやり方がデバック環境でしか動かなかったかは謎だが、謎解きは...、多分しないな (^^;

----
 やったのは結局
1.default のテンプレートをオーバーライドするディレクトリを作る
 settings.py で定義されている TEMPLATE_DIRS の下に admin ディレクトリを作り、その下にさらにアプリケーション名のディレクトリを作る。

2.そのディレクトリにオーバライド部分を書いた change_form.html を置く。内容は以下のとおり。
{% extends "admin/change_form.html" %}

{% block extrahead %}{{ block.super }}
<script type="text/javascript" src="../../../jsi18n/"></script>
{{ media }}
<style type="text/css"><!--
.vURLField { width:60em; } <-- ここがオーバライドされる css
--></style>
{% endblock %}

Firefox:div の扱いが変

 既存のページのレイアウトをちょっと変えて、
<div style="width: 500px;" align="left">
<span style="float: left;">左寄せ</span>
<span style="float: right;">右寄せ</span>
</div>
<hr>
 というコードを書いたら、最後の <HR> がとんでもないところに表示される。
 しばらく悪戦苦闘してから他のブラウザで表示させてみると IE,Chrome,Safri では問題なく表示される(多少垂直マージンに差はあったが)。
 FireBug を使ってよくよく調べていくと、<div></div> で定義した領域の高さがない。中身が[空]になっていて、そのせいで <div> の最後で当然実行されるべき <BR> が実行されず <HR> がとんでもないところに表示されるようだ。
 ためしに </div> の後ろに <BR> を入れると正常な位置に <HR> が表示された。のだが、他のブラウザで余分に行間が開いてしまう。

 最終的には <div> の直後に全角のスペースをひとつ入れることで解決。エレガントな解法はべつにありそうだが、とりあえず良いことにしよう。

2010年4月7日水曜日

Django:models.URLField の管理画面での入力欄の幅を広げる方法

 いろいろな所から情報を集めてなんとか出来た。この方法を応用すれば、管理画面の各種 css のパラメータを変更出来る。

1.default のテンプレートをオーバーライドするディレクトリを作る
 settings.py で定義されている TEMPLATE_DIRS の下に admin ディレクトリを作る。

2.そのディレクトリに dafult からオーバーライドするテンプレートをコピー
 管理画面の[追加・編集]を変更したい場合は
   Lib\site-packages\django\contrib\admin\templates\admin\change_form.html

3.{% block extrahead %} 内にオーバーライドする内容を挿入(こちらのページの687行目)
 今回は以下の赤い部分が追加分
{% block extrahead %}{{ block.super }}
<script type="text/javascript" src="../../../jsi18n/"></script>
{{ media }}
<style type="text/css"><!-- .vURLField { width:60em; } --></style>
{% endblock %}

# extends のパスをうまく設定すれば change_form.html を丸々コピーする必要はなさそうだが、今回はパス このやり方ではデプロイしたら動かなかったので、結局必要最低限だけオーバーライドさせた