html - 如何在 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%);
}
解决方案
在模板中,您必须执行类似的操作
{% for i in movies %}
<p>{{i.title}}</p>
{% endfor %}
用于逻辑时使用 {% %} ,当您想访问上下文时使用 {{ }}
如果您在模板中执行 {{movies}},它应该将完整的字典呈现为页面中的文本...
推荐阅读
- c# - 如何使用其他方法在方法中运行 ProgressBar
- android-studio - 无法从一项活动转移到另一项活动
- azure-devops - 通过 poweshell 脚本 Azure devops 自动完成 PR
- linux - Linux Perl - 将十六进制值转换为十进制
- c# - 在使用“as”强制转换对象之前是否需要进行 C# 空检查?
- django - Django - 如何在 CharField / IntegerField 上应用 onlivechange
- javascript - JavaScript 中的“事件循环”和“事件队列”是否相同?
- javascript - 继续按钮仍会禁用 Google Pay 集成
- google-cloud-platform - 如何从快照 api 响应中检索计算引擎名称?
- csv - 在 Jmeter 中为 2 个 HTTP 请求运行 2 个 CSV 文件