我目前正在尝试建立我的第一个烧瓶网站。
我使用这个 API 来获取网站的电影数据: https ://github.com/AnthonyBloomer/tmdbv3api
当我调用 API 以获取例如电影详细信息时:
from tmdbv3api import TMDb, Movie
tmdb = TMDb()
tmdb.api_key = XXX
# Define objects
movie = Movie()
def getmovie(movieid):
film = movie.details(movieid)
return film
它工作得很好,例如我将电影对象列表传递给 jinja,然后循环访问并访问详细信息,例如
{% for movie in movies %}
<div class="card content" style="width: 10rem;">
<div class="content-overlay"></div>
<div class="card-img-overlay d-flex justify-content-end">
<form action="/deletefromlist" method="post">
<input type="hidden" name="movieid" value="{{ movie.id }}" />
<button type="submit" class="btn btn-sm btn-danger">
<span class="material-icons">
remove
</span>
</button>
</form>
</div>
<div class="content-details fadeIn-bottom">
<span class="content-title">{{ movie.title }}</span>
</div>
<img class="content-image" src="https://image.tmdb.org/t/p/w300/{{ movie.poster_path }}"
onerror="this.src='/static/imgs/default.png'" class="card-img" alt="{{ movie.title }}" />
</div>
{% else %}
<div class="alert alert-warning" role="alert">
Such empty. Try adding some movies.
</div>
{% endfor %}
这工作得很好。
但我也想将电影对象中的数据存储在数据库中,这样我就不必一直访问 API:
(这会尝试在每次用户添加电影时将电影存储在数据库(SQLite3)中):
# Query db for watchlist, call API, then returns list of movie objects
def save_movie(movie_id):
m = movie.details(movie_id)
# check if already there
if db.execute("SELECT * FROM movies WHERE movie_id = :movie_id", movie_id=movie_id):
return False
genre_1 = m.genres[0]["name"]
genre_2 = m.genres[1]["name"]
db.execute("INSERT INTO movies (movie_id, title, year, releasedate, running_time, imdb_id, status, overview, country, poster_path, genre_1, genre_2) VALUES (:movie_id, :title, :year, :releasedate, :running_time, :imdb_id, :status, :overview, :country, :poster_path, :genre_1, :genre_2)",
movie_id=movie_id, title=m.title, year=m.release_date, releasedate=m.release_date, running_time=m.runtime, imdb_id=m.imdb_id, status=m.status, overview=m.overview, country=m.productioncountries, poster_path=m.poster_path, genre_1=genre_1, genre_2=genre_2)
return True
问题是,无论我尝试访问电影对象的哪个属性,都会出现以下错误,例如,如果我尝试获取 m.year:
AttributeError: 'AsObj' object has no attribute 'overview'
我尝试谷歌搜索但没有找到答案。我只是不明白为什么 jinja 访问电影对象的属性没有问题。但是蟒蛇有。
我想这与以后的“创建属性”有关吗?
先感谢您!