【问题标题】:Django - Simple search formDjango - 简单的搜索表单
【发布时间】:2023-03-23 23:03:02
【问题描述】:

使用 Django 1.9 和 Python 3.5,我想做一个简单的搜索表单:

views.py

from django.views import generic
from django.shortcuts import render
from .models import Movie, Genre

class IndexView(generic.ListView):
    template_name = 'movies/index.html'
    page_template = 'movies/all_movies.html'
    context_object_name = 'all_movies'
    model = Movie

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context.update({
            'all_genres': Genre.objects.all(),
            'page_title': 'Latest'
        })
        return context

    def get_queryset(self):
        query = request.GET.get('q')
        if query:
            return Movie.objects.filter(title__icontains=query)
        else:
            return Movie.objects.all()

表格

<form method="GET" action="" id="searchform">
    <input class="searchfield" id="searchbox" name="q" type="text" value="{{ request.GET.q }}" placeholder="Search..."/>
</form>

由于某种原因,我不断收到错误消息:

名称“请求”未定义

我不太确定我做错了什么,任何帮助将不胜感激。

【问题讨论】:

    标签: python django


    【解决方案1】:

    您似乎认为该错误并非来自您的模板。它来自你的观点

    def get_queryset(self):
        query = request.GET.get('q')
    

    应该是

        query = self.request.GET.get('q') 
    

    【讨论】:

    • 如何在文本框上添加验证?如果有人在文本框为空时单击搜索按钮,我想发出警告。
    • required = True