Web2py ... Подключение к правильному контроллеру - PullRequest
3 голосов
/ 17 февраля 2012

У меня есть 2 таблицы: business и article.

И у меня есть 3 контроллера: Home, Articles, Business.

В контроллере домашней страницы следующий код возвращает список предприятий и статей.:

     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)

с циклом в файле домашнего просмотра.

Поэтому я хочу связать статьи с контроллером «Статьи» и «Бизнес» с контроллером Business с домашней страницы ... У меня естьиспользовал следующий код:

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

Так что даже список статей теперь будет ссылаться на Business controller, используя функцию show в Business controller, но я хочу использовать if и elif согласно соответствующему списку.

1 Ответ

5 голосов
/ 17 февраля 2012

Вместо перенаправления, почему бы просто не ссылаться непосредственно на функцию 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))).

...