2009-07-08 1 views
2

поведения я предлагаю:Пилоны/Маршрутов перепишем POST или GET для фантазии URL

пользователя загружает мои «поиск» страница, www.site.com/search, типы их запрос в форме, клики отправьте, а затем закончите на сайте www.site.com/search/the+query, а не на сайте www.site.com/search?q=the+query. Я уже прошел большую часть документации Pylons и только что закончил читать документацию по маршрутам, и мне интересно, может ли это произойти на уровне маршрутов. Я уже настроил свое приложение для выполнения поиска, когда был указан сайт www.site.com/search/the+query, но не могу понять, как отправить форму в этот пункт назначения.

Или это что-то, что должно произойти внутри контроллера с redirect_to()?

Или где-то еще?

Followup:

Это меньше фактического «высечены в камне» желание прямо сейчас, и больше любопытства для мозгового штурма будущих возможностей. Я разрабатываю приложение, которое использует дамп Википедии, и заметил, что когда пользователь выполняет поиск в Википедии, и поиск не слишком неоднозначен, он перенаправляется непосредственно на ссылку статьи: en.wikipedia.org/wiki/Apple. Он фактически выполняет промежуточный этап перенаправления HTTP 302, и мне просто интересно, есть ли более элегантный/милый способ сделать это в Pylons.

ответ

2

Вы можете отправить любой контент, который захотите по любому URL-адресу, но если вы хотите, чтобы определенный URL-адрес отображался в адресной строке браузера, вам необходимо использовать перенаправление. Это не зависит от использования Pylons, Django или Rails на стороне сервера.

В обработке для /search (будь POST или GET), один, как правило, выполнить запрос в задней части, и если есть только один результат поиска (или один в подавляющем большинстве случаев соответствующий результат) вы бы переадресовать к этому результату, в противном случае на страницу, показывающую ссылки на верхние результаты N. Это обычная практика, AFAIK.

+0

Да, этот «бэкэнд-запрос и перенаправление, если только один результат» кажется лучшим способом сделать это. Благодаря! – mttmllns

2

HTML форма предназначена для перехода к определенному URL со строкой запроса (?q=) или эквивалентным телом в POST - либо вы пишете умный и тонкий Javascript перехватывать формы представления и переписать его в привилегированном странном образе , или используйте redirect_to (и последний займет некоторое время).

Но зачем вам такое странное поведение, а не просто следовать стандарту ?! Пожалуйста, объясните свой пример использования с точки зрения потребностей на уровне приложений ...!

+0

Это немного похоже на то, как работают некоторые URL-адреса переполнения стека - например, иногда вы получаете '/ questions/tagged/python', а в другое время вы получаете '/questions/tagged? Tagnames = python & sort = featured & pagesize = 30 '. Более ранняя форма, возможно, более оптимизирована для SEO, если вы хотите иметь консервированные или сохраненные поисковые запросы. –

Смежные вопросы