質問
使用届けできGedminasの 優れたブログ, 私が作成したカスタムトラバーサのためのフォルダで私のサイトです。
このできたら人に教わりたいなと思い: http://foo.com/folder/random_id
代わりに: http://foo.com/folder/object.html?id=random_id
設定の側面に、できるrandom_ids検索を通してメッセージの正しいもので、表示されます。
私の問題としているところに迷ったらどのようにその表示のデータをいつものページにテンプレートのTODO点に独自のコード)
if name == 'mycalendar':
mycalendar = ... # TODO: do something to get the appropriate object
return mycalendar
通常はん用のようなもの:
class Test(BrowserPage):
template = ViewPageTemplateFile('atest.pt')
def __call__(self):
return self.template()
もんどこで正常にコンテキストのカスタムトラバーサルをサポートします。
更新:を明らかにしたい 回避 加えば、url(No: http://foo.com/folder/random_id/read).
I な 必要にアクセス可能その他のアドレスNo: http://foo.com/folder/read)
のZCMLのリスナーをアンインストールをお使いのは:
<browser:page
for="foo.interfaces.IFooFolderContainer"
name="read"
template="read.pt"
permission="zope.ManageContent"
/>
私の推測(さらなる助言うには:
return getMultiAdapter((mycalendar, self.request), IPageTemplate, name=u'read')
でもデフォルトのビューのためのオブジェクトタイプ(dictこの場合)ことになって返される:
<browser:page
for="dict"
name="read"
template="read.pt"
permission="zope.ManageContent"
/>
解決
できやすくお答えましたかカスタムトラバーサしています。
というようになります:
def publishTraverse(self, request, name):
if name in self.context:
return MyMessageView(self.context[name], request)
# fall back to views such as index.html
view = queryMultiAdapter((self.context, request), name=name)
if view is not None:
return view
# give up and return a 404 Not Found error page
raise NotFound(self.context, name, request)
がMyMessageViewできるなど簡単なもの
class MyMessageView(BrowserPage):
__call__ = ViewPageTemplateFile('read.pt')
免責事項:んしてお使いいただく場合には、ビューのインスタンスを生成直接保護システムでは,セキュリティパ;かつ機能試験を匿名で利用できないビューのメッセージの場合ことになると考えている。
他のヒント
場合、適切なオブジェクトをカスタムトラバーサできるため、タックのテンプレート名とユーザコンテキストこのテンプレートを作成します。なので http://foo.com/folder/random_id/my_template
のテンプレートの通常の <h1 tal:content="context/title" />
ます。
IIUCしたいものは描画のための読み"表示があり、ご要望のフォルダ//random_id.本場はございますのでご注意下さい必要なのは、作成したフォーカストラバーサルを返しオブジェクト(IFolderContentか)を表すrandom_idを指定して"表示"のページのdefaultViewのためのIFolderContent.
のdefaultViewは必要ありがとうございます。眺望指定なしのrandom_idオブジェクトだ。