2012-02-17 71 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)))。