首页 > 解决方案 > 如何在 django 的 html 模板中显示搜索查询的数据?

问题描述

我正在编写一个 django 应用程序,可让您使用 Ghibli API 搜索电影。到目前为止,它可以工作,每当我寻找电影时,它都会出现,但只出现在终端中。我不知道如何在 html 中显示它之外的结果。任何建议将不胜感激。

这是视图中的代码,带有我用来访问我搜索的电影的索引功能:

from django.shortcuts import render, HttpResponse
from core.models import Movie
from django.views.generic import ListView
import requests

def index(request):
    movies = []
    if request.method == 'POST':
        
        film_url = 'https://ghibliapi.herokuapp.com/films/'
        
        search_params = {
            'films' : 'title',
            'films' : 'description',
            'films' : 'director',
            'films' : 'release_date',
            'q' : request.POST['search']
            
            }

        
        r = requests.get(film_url, params=search_params)
        results = r.json()
        print(results)

        for result in results:
             movie_data = {
                'Title' : result['title'],
                'Release_date': result['release_date'],
                'Director' : result['director'],
                'Producer' : result['producer'],
                'Description' : result['description']
            }

        movies.append(movie_data) 
 
        print(movie_data)     
    context = {
    'movies' : movies
    }
        
    return render(request,'core/index.html', context)
        

这是html:

{% load static %}
<!DOCTYPE html>
<html>
<head>
    <title>Ghibli Studio | Movies</title>
    <link rel="stylesheet" href="{% static 'core/main.css' %}">
</head>
    <body>
      <div class=" header">
         
      </div>
      <div class="wrap">
          <form method="POST">
              {% csrf_token %}
              <div class="search">


                  <input type="text" name="search" class="searchTerm" placeholder="Type movie name">
                  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
                  <button type="submit" class="searchButton">

                      <i class="fa fa-search" style="font-size:24px"></i></i>
                  </button>

              </div>

          </form>
 
      </div>
</body>
</html>

这是CSS:

body {
    background: #FFFEB3;
    font-family: 'Open Sans', sans-serif;
}
.header {
    background: url(https://upload.wikimedia.org/wikipedia/sco/thumb/c/ca/Studio_Ghibli_logo.svg/640px-Studio_Ghibli_logo.svg.png) no-repeat;
    font-size: 14px;
    width: 640px;
    height: 307px;
    display: block;
    margin-top: 80px;
    margin-left: auto;
    margin-right: auto;
}

.search {
    width: 100%;
    position: relative;
    display: flex;
}

.searchTerm {
    width: 100%;
    border: 3px solid #98F5E7;
    border-right: none;
    padding: 5px;
    height: 20px;
    margin-top: 110px;
    border-radius: 5px 0 0 5px;
    outline: none;
    color: #98F5E7;
}

    .searchTerm:focus {
        color: #00B4CC;
    }

.searchButton {
    width: 40px;
    height: 36px;
    border: 2px solid #98F5E7;
    background: #FFFEB3;
    text-align: center;
    color: #98F5E7;
    margin-top: 110px;
    border-radius: 0 2px 2px 0;
    cursor: pointer;
    font-size: 20px;
}

/*Resize the wrap to see the search bar change!*/
.wrap {
    width: 30%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

标签: htmlcssdjango

解决方案


在模板中,您必须执行类似的操作

{% for i in movies %}
    <p>{{i.title}}</p>
{% endfor %}

用于逻辑时使用 {% %} ,当您想访问上下文时使用 {{ }}

如果您在模板中执行 {{movies}},它应该将完整的字典呈现为页面中的文本...


推荐阅读