如何针对搜索行为将我的ClassView实现到模板html?

时间:2018-10-07 19:44:16

标签: django python-3.x django-models django-rest-framework django-templates

我是django的新手。我正在尝试创建pastebin.com的一个克隆,该克隆只有一个具有名称,内容和generate_url的模型(发布)。
我在搜索栏上遇到了问题。我不知道如何将SearchView实现到生成

的search.html中

这是我的模特

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})

这是我的搜索栏的root.html

<form action="{% url 'pastebin_app:search' %}" method="get" accept-charset="utf-8">

      <input name="q" type="text" placeholder="Search">

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

    </form>

这是searchview的views.py

class SearchView(ListView):
    template_name = 'pastebin_app/search.html'
    model = models.Post

    def get(self, request, *args, **kwargs):
        q = request.GET.get('q', '')
        self.results = models.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)

有人可以帮我创建可以从SearchView生成搜索结果的show.html模板吗?

1 个答案:

答案 0 :(得分:0)

您需要检出django-filter包含一个简单的api,以帮助您设置过滤对象以及如何处理复杂的过滤器。

def product_list(request):
    f = ProductFilter(request.GET, queryset=Product.objects.all())
    return render(request, 'my_app/template.html', {'filter': f})