почему не работает url_for ('module / action / id / 3') - PullRequest
1 голос
/ 07 июля 2011

Я использую url_for('module/myaction/id/3') для создания ссылок на модифицированных экранах администратора. Всякий раз, когда я делаю новое действие и пытаюсь связать его с url_for ('module/action/id/3'), я получаю /module/myaction/action.

Когда я пытаюсь url_for('module/3/myaction'), я получаю тот же результат.

Однако, когда я использую url_for('module/myaction?id=3'), я получаю ожидаемый результат: module / 3 / myaction

В моем файле маршрутизации есть только правила маршрутизации, созданные администратором по умолчанию.

Ожидается ли такое поведение?

1 Ответ

6 голосов
/ 07 июля 2011

Да, ожидается ... В том смысле, что ожидается, что передача по внешнему URL приведет к неожиданным результатам.

Вы должны передать внутренний адрес в url_forвнутренний URI записывается в виде:

@route_name?param=value

moduleName/actionName?param=value

Вы также можете представить аргументы для внутреннего URL-адреса отдельно, используя имя маршрута иобъект (если это маршрут объекта или коллекция маршрутов) в этих случаях он будет выглядеть так:

url_for('route_name', params);

Где params - это либо объект, ожидаемый маршрутом (обычноЭкземпляр модели Doctrine или Propel) или массив параметров.

Эти внутренние URI затем преобразуются во внешний URL-адрес системой маршрутизации.Вы получаете неверные результаты, потому что вы пытаетесь передать внешний URL, что не имеет смысла, потому что, если вы знаете URL, тогда нет причин для его маршрутизации: -)

...