パーソナルツール
現在位置: ホーム MY CLEF Categories Python
ドキュメントアクション

Python

一つ上に移動 Python
初めてのPython

ドキュメントアクション

はじぱい

初めてのPython

はじぱい

ノートパソコンが来た。ヒューレットパッカードのやつである。メモリは1G積んでいる。ウヒョー。

新年というには遅すぎる時期だけど何だか心機一転な感じがするわけで(うかれすぎ)、とりあえずZPTとかPythonとか勉強しなきゃと思ってしまった。

私はかなりガキんちょである。ガキんちょはおもちゃが大好きである。ファミコンに夢中になり、Macに夢中になり、htmlで遊び、Linuxをほげほげしてきた私の、今のおもちゃはZopeである。

おもちゃで楽しむためにはそのおもちゃをよく知る必要がある。楽器をうまく吹くには楽器を・音楽を知ることが大切であるのと同様、Zopeで遊ぶためにはPythonを知ることが必要だろう。

ちなみに私はPythonが全くわからない。かけらも知らない。しかし何事にも始まりがあるものだ。はじめは何もわからなくて当然である。と、言い訳しておこう。

とりあえずPythonScriptを追加してみる

いきなりZopeの中身を見たりするのはあまりに無謀。しかし地道にチュートリアルとかやるのも何だかなー、ということで、Zopeの中にPythonScriptを追加してみることにする。

helloと名付けたPythonScriptを追加するとあらかじめサンプルコードが書いてある。

# Example code:

# Import a standard function, and get the HTML request and response objects.
from Products.PythonScripts.standard import html_quote
request = container.REQUEST
RESPONSE = request.RESPONSE

# Return a string identifying this script.
print "This is the", script.meta_type, '"%s"' % script.getId(),
if script.title:
print "(%s)" % html_quote(script.title),
print "in", container.absolute_url()
return printed

これを適当にdtml methodから呼んでやって

<html>
<body>
<dtml-var hello>
<body>
<html>

表示すると

060124-1

ふーむ。%sのとこにはその後にある%ほにゃららが入る模様。下から4行目のとこには条件がある。script.titleというくらいだから、このスクリプトにタイトルがあるかどうか判断しているのだろう。タイトルがあればそれも表示せよ、といっているように見える。

追加せずにはいられない。


060124-2

「はろ~」とタイトルをいれ、再び表示。


060124-3

出た!予想通りに動いてくれると楽しい( ´艸`)

まぁ、そんな感じで今日は寝る。

カテゴリ
Python Python
トラックバック用URL:
http://nagosui.org/windaround/COREBlog2/learning-python/tbping

バインディングてあんた…誰…

containerとかscriptとか

Ploneも2.1.2になり入力フィールドにグラデなんかかかっちゃったりして、おー、新しいぜぇって感じですが、昨日サンプルスクリプトをほんの少しだけいじってみたものの、中身はよくわからん。ポートレットとかがべた塗りなのに入力フィールドだけグラデがかかってるPloneくらい意味不明である。

全然わからんといえばそれまでなのだが、とりあえず目に付いたのはこいつ↓とか

request = container.REQUEST
こいつ↓とか。
script.meta_type

ピリオドでひっついてるやつはどうもよくわからん。

何でこいつらに目をつけたかというと、何となくわかりそうだから。わかりそう、というと何だか偉そうですな…。もちろん名前が比較的わかりやすいというのもあるけれど、ZMIをよく見るとヒントくさいのがある。


060124-4

↑ここらへんである。

containerとかscriptとかいうのはバインディング変数である。バインディングというのは、ひっつけるということである。よくわからんけど、とりあえずバインディングタブを見てみると…


060124-5

contextの綴りが違っているのがわかる(違

contextじゃなくてcontainerはスクリプトが入ってる容器であるオブジェクト(ここではPythonというフォルダオブジェクト)、script はスクリプト自体を指してると理解していいのだろうか。まー、そういうことにしておこう。

さてはこいつらを使ってほげほげできるということだな。ふつーならいろいろ自分で用意しなきゃいけないものが最初から用意されてるとは親切ではないか。さっそく遊んでやろう。

書式はよくわからんが、サンプルスクリプトの中で

script.title
script.meta_type
container.absolute_url()

こんな使われ方をしてるわけだから、

「container.title」とか「container.meta_type」とか「script.absolute_url()」とかしてやれば、コンテナのタイトルとかメタタイプとか、スクリプトのURLとかが得られるハズ。ということはたとえば…

print "コンテナのタイトルは「", container.title, "」で、コンテナのメタタイプは「", container.meta_type, "」ナリよ"
なんていうふうにすれば、コンテナのタイトルとメタタイプを教えてくれるハズ。
ということで新しくcontainer_infoというPythonScriptを追加。わからない所はいじらずにそっとしておくのが味噌だと思う。
# コンテナのタイトルとメタタイプを教えてくれるコード:

# Import a standard function, and get the HTML request and response objects.
from Products.PythonScripts.standard import html_quote
request = container.REQUEST
RESPONSE = request.RESPONSE
print "コンテナのタイトルは「", container.title, "」で、コンテナのメタタイプは「", container.meta_type, "」ナリよ"

return printed
これを呼んでやると。

060125-1

できたヾ(゜∀゜)/ウヒョ~
しかし何故absolute_url()には括弧がついてるんだろう…

カテゴリ
Python Python
トラックバック用URL:
http://nagosui.org/windaround/COREBlog2/learning-python-binding/tbping

Products PythonScripts standardをいじってみるテスト

まだまだサンプルスクリプトにはわからないことが満載である。わからないときの基本はヘルプである。ZMIにはヘルプへのリンクがあるのでポチッとな。


060126-1

いかにもなリファレンス発見。いろいろ書いてあるではないか。しかもサンプルスクリプトの中で一番難しそうなProducts.PythonScript.standardについてのヘルプもある。せっかくなのでこれを読んでみたところ、…さっぱりわからない( ´艸`)

サンプルスクリプトではこいつはどういうふうに使われてたっけか。

from Products.PythonScripts.standard import html_quote

Products.PythonScript.standardからhtml_quoteをインポートする、と言っている。で、ヘルプを見てみると確かにProducts.PythonScript.standardのリファレンスのところには「html_quote」というやつの説明もある。ほかにもいろいろな機能の説明が書いてあることから敷衍すればおそらく、Products.PythonScript.standardっていうのは基本的な機能のセットで、このセットの一機能としてhtml_quoteがあるということか。

そういえばサンプルスクリプトの最後の方でhtml_quoteが使われてる。逆に言えばこの機能を使うためには、最初の方でこの機能を使うことを宣言しなければならないということなのだろう。

せっかくなので簡単な機能を使ってみよう(・∀・)
めっちゃ簡単そうなやつ↓

  • thousand_commas(number)
  • whole_dollars(number)
  • dollars_and_cents(number)

数を扱うだけなので簡単なのさ。

numberという名前のスクリプトを追加して

# Products.PythonScripts.standardのテストコード

from Products.PythonScripts.standard import whole_dollars,dollars_and_cents


print whole_dollars(12345)
print dollars_and_cents(12345)

return printed

などとしてやる。

#thousand_commasは使っちゃダメっていわれた…

結果ワー、

060126-2

うむ。いい感じ。

カテゴリ
Python Python
トラックバック用URL:
http://nagosui.org/windaround/COREBlog2/Products-PythonScripts-standard-help/tbping

Zopeのprintedって輩のこと

ヘルプを眺めてたらprintedについて書いてあるのを発見した。

サンプルスクリプトの最後には「return printed」と書いてあって、こりゃなんだー、と思ってたところだったのだ。「print」ってのはプログラムでよく見るけど、「printed」はあんまり見ないからなぁ。

Because the "print" statement cannot operate normally in Zope, its effect has been changed.

で、結局、

The special builtin name "printed" evaluates to the concatenation of all text printed so far during the current execution of the script.

ということらしい。要するに、いろいろprintしたものをつないでそいつら全部をまとめちゃうわけね。ということは、

print "このスクリプトのタイトルは"
print script.title
print "なんですよ。マジで。"
return printed

なんてふうにすれば…


060127-1

となるのか。「つなぐ」といってもインライン要素みたいにつなぐわけじゃないのね…。

カテゴリ
Python Python
トラックバック用URL:
http://nagosui.org/windaround/COREBlog2/learning-python-zope-printed/tbping
このBlogについて
Plone, Zope, Pythonなどのトピックについてのメモです。
カテゴリ
Plone (101)
Plone Products (23)
COREBlog2 (31)
COREBlog1 (29)
ReadingCOREBlog (7)
Zope (66)
Turbogears (18)
Django (12)
Python (27)
Linux (32)
Nagosui (13)
Design (35)
Misc (49)
moblog (5)
Mac (1)
最近のエントリ
Ploneのレイヤー機能を使ってテーマを管理する nyusuke 2010年01月03日
MacOSXにPython2.4をインストール nyusuke 2009年03月21日
Ploneを3.1から3.2へアップグレード nyusuke 2009年03月01日
Plone3.2+その他もろもろのレシピ nyusuke 2009年03月01日