2009-06-30 63 views
1

Hy, 是否有Python的基於事件驅動器/事件的Web框架?用於Python的事件驅動的Web框架

我的意思是類似NitroGen是erlang。

您只需將一些組件添加到網站(如按鈕)並將python函數與按鈕的「onclick」處理程序關聯並執行即可。它應該產生對我來說(就像氮所做的)所有需要的HTML和JS核心,支持所有需要的組件(如跨度,P,按鈕,文本框,passwordfield ...) 如下面的代碼:

from pyjamas.ui.RootPanel import RootPanel 
from pyjamas.ui.Button import Button 
from pyjamas import Window 

def greet(fred): 
    Window.alert("Hello, AJAX!") 

if __name__ == '__main__': 
    b = Button("Click me", greet) 
    RootPanel().add(b) 

獲得this

我發現的唯一框架是PyJamas,但它是爲Web應用程序(比如Webmailer)而不是Web-Pages(其中谷歌需要內容索引以及哪些應該可讀,沒有js,功能有限) 。那麼有沒有類似睡衣或氮氣的東西?

謝謝!

回答

3

KSS(動力學樣式表)提供類似於氮東西。儘管KSS與NitroGen的不同之處在於它定義了一個簡單的特定於域的語言(DSL),用於聲明JavaScript事件應該如何綁定到客戶端的HTML頁面,並且此DSL還可以聲明事件需要觸發服務器端通過AJAX組件。使用NitroGen和睡衣,包含JavaScript如何與HTML進行交互的信息是從服務器端語言的一部分數據結構中推導出來的。

http://kssproject.org/

從KSS項目介紹,「KSS既有客戶端JavaScript庫和服務器端支持。客戶端Javascript庫必須包含在您的網頁。它獲取動力學樣式表從服務器解析它們並將一組操作綁定到瀏覽器事件和/或頁面元素,它是乾淨的Javascript代碼,可以與其他乾淨的Javascript庫(如JQuery或ExtJS)和平共處。

KSS可以獨立於任何Python或服務器端代碼使用。但是,KSS中有一些工具將KSS客戶端事件綁定到Python Web框架中的服務器端可調參數。有許多Python的流行Web框架(Django,Pylons,Zope,Plone,Grok)使用KSS綁定。

-1
+0

及其低級,即時搜索知道我想放在HTML頁面上的組件,並生成所需的html和js代碼以將其連接到我的python代碼。 – theomega 2009-06-30 22:53:12

1

HTML不是事件驅動的,所以你不能使用事件驅動的Web框架而不使用Ajax,而你並不想這樣做。所以答案是否定的,因爲這樣的事情根本不可能,

我懷疑你的意思,而不是事件驅動的是,你有一個系統,你可以定義一個模式併爲你生成表格。每個Web框架都有。

但是您喜歡組件和事件驅動開發,請查看基於Zope Toolkit的Web框架,即Grok,Repoze.BFG,Zope3和其中最新的:Bobo。

http://grok.zope.org/ http://bfg.repoze.org/ http://wiki.zope.org/zope3/Zope3Wiki http://bobo.digicool.com/

編輯:OK,顯然這個問題是隻與睡衣,不使用Javascript。 在這種情況下,KSS,如上所述的工作。它可用於上面的框架! (上扭曲的頂部時,它現在可能)

+0

HTML本身並不是事件驅動的,但可以使用ajax。所以當我在我的問題中寫道,即時通訊尋找一個工具包來生成HTML和JS。但簡單的(非動態的,基於事件的內容)應該在html中用於seo puroposes。我希望你現在明白。 – theomega 2009-07-01 07:27:41

1

Zope 3可能適合你的目的,並因而可能Divmod Mantissa - 他們肯定都強烈事件驅動,尤其是尾數,和_any_thing 「低級別「,特別是Zope(事實上,對後者的頻繁抱怨是,它太高級了,掌握不了);-)。

0

你的榜樣與Nagare

from nagare import presentation 

def greet(self): 
    window.alert('Hello world!') 

class MyComponent(object): 
    pass 

@presentation.render_for(MyComponent) 
def render(self, h, *args): 
    return h.input(type='submit', onclick=greet) 
相關問題