如何通过基于类的视图添加搜索栏

Posted

技术标签:

【中文标题】如何通过基于类的视图添加搜索栏【英文标题】:How do i add a searchbar through class based view 【发布时间】:2019-03-12 06:53:56 【问题描述】:

我是 django 的新手,我正在尝试创建一个简单的 [pastebin.com][1] 克隆版本,它只有一个带有名称和内容的模型。我已经在我的根模板中创建了搜索栏。但是,仅过滤名称并显示名称和内容列表的实际类视图是什么? `

帕特宾评估项目

  <input class="searchfield" id="searchbox" name="q" type="text" placeholder="Search"/>

  <input class="searchbutton" type="submit" value="Search"/>


</form>`

正如我已经说过的,我对 django 很陌生。这是我的模型

from django.db import models
from django.urls import reverse

# Create your models here.
class Post(models.Model):
    name = models.CharField(db_index=True, max_length=300, blank=False)
    content = models.TextField()
    generated_url = models.CharField(db_index=True, max_length=10, blank=False)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("pastebin_app:detail",kwargs='pk':self.pk)

【问题讨论】:

【参考方案1】:

您需要创建一个视图来处理搜索行为。没有这样的通用视图,但很容易创建:

class SearchView(TemplateView):
    template_name = 'search.html'

    def get(self, request, *args, **kwargs):
        q = request.GET.get('q', '')
        self.results = Post.objects.filter(name__icontains=q)
        return super().get(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        return super().get_context_data(results=self.results, **kwargs)

将您的视图添加到您的urls.py

url(r'^search/$', SearchView.as_view(), name='search')

并确保为搜索表单设置正确的 actionmethod 属性:

<form method="GET" action="% url 'pastebin_app:search' %">

【讨论】:

非常感谢您的帮助,它工作得非常好。我需要涵盖很多基础知识,请您帮我解决如何在我的“search.html”中实现这个 SearchView 很抱歉问了所有这些菜鸟问题 @ZeedTanue results 现在在您的模板视图中可用。现在您可以创建一个循环 - for result in results。然后您可以在列表或表格中显示结果。

以上是关于如何通过基于类的视图添加搜索栏的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 Django 中当前基于类的通用视图模型向模板加载器添加路径

基于 Django 类的 post-only 视图

是否可以在从基于类的视图返回的查询集中添加额外值(查询中的2个字段的计算)

我可以更改基于类的视图的模板搜索行为吗?

使用基于类的视图和 ajax 的 Django 应用程序?

Django 基于类的通用视图和身份验证