2016-09-06 45 views
2

我創建的頁面在用戶搜索後返回基本細節的電影列表。django:鏈接到返回結果列表中的詳細頁面

搜索結束後,我希望用戶能夠點擊電影並獲取更多詳細信息。

下面是該網站的鏈接:(溫柔,我纔開始2個月前學習這個東西哈!)http://moniblog.pythonanywhere.com/compare/

數據從TMDB's api到來,最初的「通用」搜索JSON響應沒有按」沒有具體的細節,我會顯示在電影的詳細信息頁面,但它有一個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) 
+0

'url(r'^(?P [0-9])+ $',views。get_movie,name ='movies')'我在視圖文件中看不到這個視圖。 –

+0

@BernardParah是的,這是我遇到麻煩的地方。我不知道如何創建這個細節的視圖直接到 ..該網址只是我嘗試不同的事情,至少得到「東西」顯示..我做的測試這個視圖函數是: 'DEF get_movie(請求,movid =無): 實例= get_object_or_404(請求,movid = movid) 上下文= { '實例':實例 } 返回渲染(請求,」 ./moviecompare/detail.html ',context)' – Jon

+0

我會做的是顯示電影的標識或標題,並使用通用的詳細視圖來查看顯示詳細信息頁面。在詳細信息頁面中,您可以決定添加所有額外信息,而無需再次調用api。 –

回答

1

我認爲你應該嘗試修復這一行中的urls.py:

url(r'^(?P<movid>[0-9])+$', views.get_movie, name='movies') 

移動「+」這樣的括號內:

url(r'^(?P<movid>[0-9]+)$', views.get_movie, name='movies') 
0

我能夠通過固定每羅馬的答案URLPATTERN得到這個工作,有一些需要的調整一起。

在應用urls.py

我需要改變的順序:

urlpatterns = [ 
    url(r'^(?P<movid>[0-9]+)$', views.get_movie, name='movie_detail'), 
    url(r'^', views.search_movie, name='compare'), 
] 

以及根urls.py我有:

url(r'^compare/', include('moviecompare.urls', namespace='compare')), 

加入的功能的觀點:

def get_movie(request, movid): 
    movie = tmdb.Movies(movid) 
    response = movie.info() 
    context = { 
     'response': response 
    } 
    return render(request, './moviecompare/detail.html', context) 

並用它來鏈接html中的細節:

{% url 'compare:movie_detail' movid=key.id %} 
相關問題