使用IMDBPy中的一个全面的(巨大的)电影标题列表(Django项目)创建一个自动完成的搜索表单(可能是w/jQuer



我正处于通过Python包IMDBPy(他们的网站((proj github(检索IMDB数据的早期阶段。我一直在参考这个不错的IMDBPy实现,以获得我在这里所做工作的一些方面的帮助。我正在使用的几个查询生成数据集;嵌套字典";形式,例如"movie_1":{"title":"One Flew Over the Cuckoo’s Nest","director":"Milos Forman"…}。我早期版本的标题检索在VIEWS.PY:中采用这种形式

def index(request):
imdb = IMDb()
test_movies = {}
for i in range(1100000, 1100015):
test_movies[f'movie_{i}'] = imdb.get_movie(f'{i}')
context = {
'test_movies':test_movies,
}
return render(request, 'index.html', context)

这个在我的INDEX.HTML模板中:

<div id="search-part1">
<ul>
{% for k1,v1 in test_movies.items %}
{% for k2,v2 in v1.items %}
{% if 'title' in k2 %}
<li>{{v2}}</li>
{% endif %}
{% endfor %}
{% endfor %}
</ul>
<input type="text" name="search" id="search" class="form-control" placeholder="Search for Movies">
</div>

现在,HTML只是为了表明我*可以生成这些标题的列表。在这一点上,我对搜索栏下拉菜单的实际实现(通过jQuery的Autocomplete(还有一段路要走。以下是他们在jQuery文档中提供的自动完成操作示例:

<script>
$( function() {
var availableTags = [
"ActionScript",
"AppleScript",
"Asp",
"BASIC",
"C",
"C++",
"Clojure",
"COBOL",
"ColdFusion",
"Erlang",
"Fortran",
"Groovy",
"Haskell",
"Java",
"JavaScript",
"Lisp",
"Perl",
"PHP",
"Python",
"Ruby",
"Scala",
"Scheme"
];
$( "#tags" ).autocomplete({
source: availableTags
});
} );
</script>

从本质上讲,在这个阶段,我想列出一个所有可能的电影标题的庞大列表,并根据用户在标题搜索中输入的前几个字母来缩小范围。其中五六个需要出现在搜索栏下方的自动完成下拉列表中。

所以,是的,这里面有很多活动的部分。这是巨大的电影标题数据库的一部分,我们使用用户输入的前几个字母来过滤它。在某个时候,出现在HTML的jQ部分的var数组需要填充下拉自动完成中显示的值。我不确定这个数组在HTML模板中能有多大,否则它在视觉上或性能上都会变得非常笨拙。我不知道Django项目的这些不同组件是否能够如此动态、快速地交互。我不知道在项目的这个阶段,我是否采取了合理的方法来实现我的目标。

如果能为我所做的全部甚至部分工作提供任何建议,我将不胜感激!

编辑:在我的训练营课程中,我们还没有进入Ajax。我想这可能正是将内容从大型数据库轻松/动态地传输到前端的方法,嗯?

编辑2:也许我应该尝试将IMDB数据(作为字典的字典(格式化为JSON?这样的数据翻译效果会更好吗?我没有过多地使用JsonResponse或其他与json相关的包。

您正在对格式为{'movie_1100000’:<电影对象>}的dict的k1,v1进行迭代

然后迭代Movie实例的键和值k2,v2(其行为类似于dict(从那里,您只过滤包含"title"的k2密钥;有各种各样的,比如"title","canonical title","long imdb canonical title"和其他各种方法(请参见Movie类的_aditional_keys方法(。然后打印它的值。

显然,默认情况下不可能直接访问Django模板中的密钥,因此您必须对每个密钥进行迭代,并找到您想要的完全匹配。

这应该有效:

<div id="search-part1">
<ul>
{% for k1,v1 in test_movies.items %}
{% for k2,v2 in v1.items %}
{% if k2 == 'title' %}
<li>{{v2}}</li>
{% endif %}
{% endfor %}
{% endfor %}
</ul>
<input type="text" name="search" id="search" class="form-control" placeholder="Search for Movies">
</div>

相关内容

  • 没有找到相关文章

最新更新