Web2py - 元件



元件定義為網頁的獨立功能部分,可以自主執行。它可以由嵌入網頁的模組、控制器和檢視組成。應用程式中的元件必須是本地化的標籤,並且其效能被認為與模組無關。

在 web2py 中,主要關注的是使用載入到頁面中並透過 AJAX 與元件控制器通訊的元件。

web2py 包含一個名為 **LOAD** 的函式,它使得無需顯式 JavaScript 或 AJAX 程式設計即可輕鬆實現元件。

考慮一個名為“**test**”的簡單 web 應用程式,它使用“**models/db_comments.py**”檔案中的自定義模型擴充套件了 web2py 應用程式。

db.define_table(
   'comment_post', Field('body','text',
   label = 'Your comment'),auth.signature
)

上述程式碼將建立一個名為“**comment_post**”的表,並具有正確的表定義。該操作將藉助“**controllers/comments.py**”中的函式實現。

def post():
   return dict(
      form = SQLFORM(db.comment_post).process(),
      comments = db(db.comment_post).select()
   )

相應的檢視將顯示為:

{{extend 'layout.html'}}
{{for post in comments:}}

<div class = "post">
   On {{= post.created_on}} {{= post.created_by.first_name}}
   says <span class = "post_body">{{= post.body}}</span>
</div>

{{pass}}
{{= form}}

可以使用以下 URL 訪問頁面:**http://127.0.0.1:8000/test/comments/post**

上述方法是訪問檢視的傳統方法,可以透過實現 LOAD 函式來更改。

這可以透過建立一個副檔名為 **".load"** 的新檢視來實現,該檢視不擴展布局。

建立的新檢視將是 **"views/comments/post.load"**:

<div class = "post">
   On {{= post.created_on}} {{= post.created_by.first_name}}
   says <blockquote class = "post_body">{{= post.body}}</blockquote>
</div>

{{pass}}
{{= form}}

訪問頁面的 URL 將是:**http://127.0.0.1:8000/test/comments/post.load**

LOAD 元件可以嵌入到 web2py 應用程式的任何其他頁面中。這可以透過使用以下語句來完成。

{{= LOAD('comments','post.load',ajax = True)}}

例如,可以編輯 **控制器** 為:

def index():
   return dict()

在 **檢視** 中,我們可以新增元件:

{{extend 'layout.html'}}
{{= LOAD('comments','post.load',ajax = True)}}

可以使用以下 URL 訪問頁面:**http://127.0.0.1:8000/test/default/index**

元件外掛

元件外掛是唯一定義 **元件** 的外掛。元件使用其模型定義直接訪問資料庫。

如前例所示,可以將註釋元件新增到 **comments_plugin** 中,這可以在 **模型** 部分完成:

"**models/plugin_comments.py**":

db.define_table(
   'plugin_comments_comment',
   Field('body','text', label = 'Your comment'),
   auth.signature
)

**控制器** 將包含以下外掛:

def plugin_comments():
   return LOAD('plugin_comments','post',ajax = True)
廣告
© . All rights reserved.