Использование TMDb API в Django Web Framework для получения постеров для фильмов в базе данных - PullRequest
1 голос
/ 06 марта 2020

Я показываю все фильмы в базе данных, в списке и хотел бы иметь соответствующий плакат под каждым mov ie. Я думаю, что допустил ошибку в своем представлении, поскольку я пытаюсь сделать запрос в классе представления. Модель mov ie имеет поле 'tmdb', в котором хранится идентификатор TMDb для каждого фильма.

Было бы замечательно, если бы кто-то мог указать мне правильное направление, поскольку я все еще новичок в Django, и я раньше не пользовался многими API.

Я не могу опубликовать скриншот, но в результате на каждой веб-странице отображается пустой эскиз под каждым перечисленным mov ie.

Заранее спасибо!

views.py

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
import csv, io, requests
from .models import Movie
from django.views.generic import ListView
from . import config

my_api_key = 'my_api_key'
base_url = 'https://api.themoviedb.org/3/'

def index(request):
    return HttpResponse("Hello, world. This is the movie app index.")

class movie_list_view(ListView):
    model = Movie
    template_name = 'movieapp/movies.html'
    context_object_name = 'movies'
    ordering = ['movie_id']
    paginate_by = 100

    def movie_poster(request, movie_id):
        url = f'{base_url}movie/{Movie.tmdb}?api_key={my_api_key}&language=en-US&page=1'
        response = requests.get(url)
        tmdb_movies = {'movieposter':response.json()}
        return render(request, 'movies.html', context=tmdb_movies)

фильмы. html

{% block content %}

<h1>Movies</h1>

{% for movie in movies %}
<div>
    <h3> {{movie.title }}</h3>
    <img src="https://image.tmdb.org/t/p/w185_and_h278_bestv2/{{movieposter.poster_path}}">
</div>
{% endfor %}

{% endblock content %}

models.py

from django.db import models

class Movie(models.Model):
    movie_id = models.IntegerField()
    title = models.CharField(max_length=200)
    genres = models.CharField(max_length=150)
    imdb = models.CharField(max_length=50)
    tmdb = models.CharField(max_length = 50)

    class Meta:
        ordering = ['movie_id']

    def __str__(self):
        return self.title
...