На вид, может быть что-то вроде:
{{import string}}
{{for browse_type in ['category', 'listing', 'locality', 'brand']:}}
{{=CAT('Browse by ', browse_type, ' ',
*[A(letter, _href=URL('default', 'browse', args=[browse_type, letter]))
for letter in string.uppercase])}}
{{pass}}
Это создаст набор ссылок, таких как / yourapp / default / browse / category / A и т. Д. Конечно, вам придется заполнить HTML-код немного больше, чтобы получить нужный формат / макет, который вы хотите - Выше приведен только пример того, как генерировать ссылки.
Тогда в контроллере:
def browse():
if len(request.args) < 2:
redirect(URL('default', 'somewhere'))
[code to generate items to browse based on browse type and letter]
Обратите внимание, что request.args (0) будет содержать тип просмотра (т. Е. «Категория», «список» и т. Д.), А request.args (1) будет содержать букву (т. Е. «A», « Б "и т. Д.). Вы можете использовать эти значения для генерации соответствующего запроса, который будет зависеть от того, как вы структурировали свои данные.
Если в некоторых письмах нет элементов, вы можете удалить эти ссылки или сделать их неактивными. Для этого потребуется запрос к базе данных перед созданием ссылок на страницы, чтобы вы знали, какие ссылки показывать / делать активными - чтобы минимизировать попадания в БД, вам, вероятно, следует кэшировать этот запрос в течение некоторого времени (или, что еще лучше, кэшировать полный HTML-код разбивки на страницы).