Реализация нумерации страниц для результатов APIHtml

Программисты Html
Ответить
Anonymous
 Реализация нумерации страниц для результатов API

Сообщение Anonymous »

Я создаю веб-приложение на Go (используя стандартную библиотеку net/http), которое извлекает список популярных фильмов из API TMDB. В настоящее время я получаю и показываю все фильмы одновременно, но хочу реализовать нумерацию страниц на стороне сервера, чтобы отображать только определенное количество фильмов на странице (например, 5 фильмов).
Я успешно интегрировал API и декодировал данные в свои структуры Go. Основная проблема заключается в управлении логикой нарезки внутри контроллера.
Мне нужно изменить функцию контроллера (

Код: Выделить всё

Collection
), чтобы:
  • Прочитать параметр запроса ?page=X.
  • Вычислить индексы начала и конца фрагмента.
  • Передать в шаблон только необходимый фрагмент фильмов (например, 5 фильмов).
Вот моя функция получения данных и мой текущий контроллер:

Код: Выделить всё

functions/films.go
(извлечение и сопоставление данных):

Код: Выделить всё

func GetPopularFilms() ([]structure.PopularFilmsData, error) {
// Local struct for JSON decoding
type ApiData struct {
Results []struct {
Title        string  `json:"title"`
Vote_Average float64 `json:"vote_average"`
Overview     string  `json:"overview"`
Release_date string  `json:"release_date"`
Poster_path  string  `json:"poster_path"`
}
}

// ... Code for executing the HTTP request and error checking ...

var decodeData ApiData
if err := json.NewDecoder(res.Body).Decode(&decodeData); err != nil {
return nil, err
}

// Mapping to my view struct
var films []structure.PopularFilmsData
for _, result := range decodeData.Results {
films = append(films, structure.PopularFilmsData{
Title:        result.Title,
Overview:     result.Overview,
Release_date: result.Release_date,
Poster_path:  "https://image.tmdb.org/t/p/original" + result.Poster_path,
})
}
return films, nil // Returns ALL fetched films
}

Код: Выделить всё

controllers/collection.go
(Контроллер):

Код: Выделить всё

func Collection(w http.ResponseWriter, r *http.Request) {
films, err := functions.GetPopularFilms()
if err != nil {
// Error handling (omitted for brevity)
return
}

// Currently sends ALL films.
data := PageData{
PopularFilms: films,
// How should I calculate and pass TotalPages, CurrentPage, and the film sub-slice here?
}

tmpl := template.Must(template.ParseFiles("template/collection.html"))
tmpl.Execute(w, data)
}
Каков наилучший идиоматический подход Go для изменения функции Collection для чтения параметра страницы (), вычислите начальный и конечный индексы ( и end) и использовать нарезку Go для отправки в шаблон только элементов фильмов[start:end]?
Мне также нужен совет, как правильно обрабатывать крайние случаи, например, когда запрошенный индекс превышает общую длину среза.>

Подробнее здесь: https://stackoverflow.com/questions/798 ... pi-results
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»