ユーザの検索後に基本的な詳細を含むムービーのリストを返すページを作成しています。django:返された結果のリストから詳細ページへのリンク
検索後、私はユーザーがムービーをクリックして詳細を知りたいと思います。データはTMDB's apiから来ていると、最初の「汎用」の検索JSONレスポンスが」doesnの(私は2ヶ月前にこのようなものを学び始め、穏やかなほら!)http://moniblog.pythonanywhere.com/compare/
:
はこちらのサイトへのリンクですムービーの詳細ページに表示される特定の詳細はありますが、特定のムービーの検索に使用されるIDがあります。
私は、検索結果を取得/表示するためにのみviews.pyを使用しています。これが正しい方法か、モデルを使用すべきかどうかは分かりませんが、それはおそらく別の質問です。
forms.py:
from django import forms
class MovieSearch(forms.Form):
moviename = forms.CharField(label="Search", max_length=250)
views.py:
from django.shortcuts import render, get_object_or_404
from django.conf import settings
from .forms import MovieSearch
import tmdbsimple as tmdb
tmdb.API_KEY = settings.TMDB_API_KEY
def search_movie(request):
parsed_data = {'results': []}
if request.method == 'POST':
form = MovieSearch(request.POST)
if form.is_valid():
search = tmdb.Search()
query = form.cleaned_data['moviename']
response = search.movie(query=query)
for movie in response['results']:
parsed_data['results'].append(
{
'title': movie['title'],
'id': movie['id'],
'poster_path': movie['poster_path'],
'release_date': movie['release_date'][:-6],
'popularity': movie['popularity'],
'overview': movie['overview']
}
)
for i in range(2, 5 + 1):
response = search.movie(query=query, page=i)
for movie in response['results']:
parsed_data['results'].append(
{
'title': movie['title'],
'id': movie['id'],
'poster_path': movie['poster_path'],
'release_date': movie['release_date'][:-6],
'popularity': movie['popularity'],
'overview': movie['overview']
}
)
context = {
"form": form,
"parsed_data": parsed_data
}
return render(request, './moviecompare/movies.html', context)
else:
form = MovieSearch()
else:
form = MovieSearch()
return render(request, './moviecompare/compare.html', {"form": form})
とhtml:
{% extends 'moviecompare/compare.html' %}
{% block movies_returned %}
<div class="wrap">
<div class="compare-gallery">
{% for key in parsed_data.results|dictsortreversed:'release_date' %}
{% if key.poster_path and key.release_date and key.title and key.overview %}
<div class="gallery-item">
<img src="http://image.tmdb.org/t/p/w185/{{ key.poster_path }}">
<div class="gallery-text">
<div class="gallery-date"><h5><span><i class="material-icons">date_range</i></span> {{ key.release_date }}</h5></div>
<div class="gallery-title"><h3><a href="../detail/{{ key.id }}">{{ key.title }}</a></h3></div>
<div class="gallery-overview">{{ key.overview|truncatechars:80 }}</div>
</div>
</div>
{% endif %}
{% endfor %}
</div>
</div>
{% endblock %}
私が何かにを取得するために、urls.pyで遊んで始めました仕事は、しかし、これまで運がない。
サイトのurls.py:
urlpatterns = [
url(r'^$', home, name="home"),
url(r'^blog/', include('blog.urls', namespace='blog')),
url(r'^compare/', include('moviecompare.urls', namespace='compare')),
url(r'^movies/', include('moviecompare.urls', namespace='movies')),
とアプリのurls.py:
編集:私の第一の追加(失敗した)映画の詳細ビューの試み:
def get_movie(request, movid=None):
instance = get_object_or_404(request, movid=movid)
context = {
'instance': instance
}
return render(request, './moviecompare/detail.html', context)
'url(r' ^(?P [0-9])+ $ '、views。get_movie、name = 'movies') 'このビューはビューファイルで定義されていません。 –
@BernardParahはい、これは私が困っているところです。私はに向けてこのディテールのビューを作成する方法がわかりません。そのURLはちょうど私が表示する "何か"を得るために異なるものを試しています。私がこれをテストするために作ったビュー関数は、 'DEF get_movie(リクエスト、movid =なし):= get_object_or_404 インスタンス(要求、movid = movid) コンテキスト= { 'インスタンス':インスタンス }リターン「は、(リクエストをレンダリング./moviecompare/detail.html '、context) ' –
Jon
私は、ムービーのIDまたはタイトルを表示し、詳細ビューを表示するには一般的な詳細ビューを使用します。詳細ページでは、APIをもう一度呼び出すことなく、すべての追加情報を追加することができます。 –