Вместо перенаправления, почему бы просто не ссылаться непосредственно на функцию show()
в каждом контроллере и настроить URL-адреса следующим образом:
{{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)
Примечание: URL будут выглядеть лучше, если вы сделаете id записи аргументом вместо var (то есть / show / 1 вместо / show? id = 1).Кроме того, если вам нужно указать переменные в функции URL()
, не добавляйте их явно к имени функции в виде строки запроса (т. Е. Не делайте URL(..., f='show?id=%s' % myid)
) - вместо этого используйте аргумент vars
(т. е. URL(..., f='show', vars=dict(id=myid))
).