2012-02-17 72 views
3

我有2個表:業務和文章。Web2py ...連接到正確的控制器

而我有3個控制器:家庭,文章,企業。

在主頁控制器下面的代碼返回企業和文章的列表:

 def index(): 
     lists= db().select(db.article.ALL,limitby=(0, 5),orderby=~db.article.id) 
     listings=db().select(db.business.ALL) 
     return dict(lists=lists,listings=listings) 

在主頁視圖文件中的循環。

所以我想向本刊控制器文章和業務鏈接從主頁業務控制器...我用下面的代碼:

def show(): 
     myid == request.vars.id 
     redirect(URL(c='businesses',f='show?id=%s'% myid)) 

因此,即使文章列表將鏈接到業務控制器現在使用Business控制器中的函數show,但是我想根據各自的列表使用if和elif。

回答

5

相反重定向,爲什麼不直接鏈接到show()功能在每個控制器,並設置網址如下:

{{for article in lists:}} 
<a href="{{=URL('article', 'show', args=article.id)}}">{{=article.title}}</a> 
{{pass}} 

,同樣的業務環節。

在article.py:

def show(): 
    article = db(db.article.id == request.args(0)).select().first() 
    return dict(article=article) 

另一種選擇是在你的主控制器只使用一個單一的show()函數來處理這兩篇文章和企業。在這種情況下,鏈接是這樣的:

文章:URL('home', 'show', args=['article', article.id])

業務:URL('home', 'show', args=['business', business.id])

和home.py:

def show(): 
    item = db(db[request.args(0)].id == request.args(1)).select().first() 
    return dict(item=item) 

的show.html視圖然後可以包括邏輯以不同的方式顯示文章和業務(取決於request.args(0)的值),或者show()函數可以顯式設置替代article.html和business.html視圖,如下所示:

response.view = 'home/%s.html' % request.args(0) 

側面說明:該網址看起來更好,如果你做的記錄id的ARG而非VAR(即/顯示/ 1,而不是/節目ID = 1?)。另外,如果你需要指定的URL()功能增值經銷商,並沒有明確他們追加到功能名稱作爲查詢字符串(即不做URL(..., f='show?id=%s' % myid)) - 相反,使用vars參數(即URL(..., f='show', vars=dict(id=myid)))。