Django-如何将值从现有HTML表单传递到列表视图

Django-如何将值从现有HTML表单传递到列表视图,django,Django,我有一个现有的HTML表单文本字段+按钮,但不知道如何将输入值传递给列表视图 更新: book/home.html: 书籍/视图: 书籍/网址: book/templates/search.html仅用于测试: 浏览器上出现错误: 首先,对于搜索功能,您可以使用GET request而不是POST。要将表单数据发送到特定视图,请使用“操作”属性。还需要为输入元素添加名称属性: 如果试图创建自定义查询集并仅显示筛选器查询集而不是完整查询集,则可以覆盖get_queryset函数,并通过访问self

我有一个现有的HTML表单文本字段+按钮,但不知道如何将输入值传递给列表视图

更新:

book/home.html:

书籍/视图:

书籍/网址:

book/templates/search.html仅用于测试:

浏览器上出现错误:

首先,对于搜索功能,您可以使用GET request而不是POST。要将表单数据发送到特定视图,请使用“操作”属性。还需要为输入元素添加名称属性:


如果试图创建自定义查询集并仅显示筛选器查询集而不是完整查询集,则可以覆盖get_queryset函数,并通过访问self.request.POST获取表单输入

然后,您只需确保输入具有如下名称:

<input name="book_name" style="font-size: 12px; width: 200px" class="form-control mr-sm-2" type="search" placeholder="Book Name" aria-label="Search">

是的,这很有道理。但它说找不到页面404找不到与查询匹配的书籍。书中的文件名为“title”,所以我写了queryset.filtertile\uuu包含class='search'。我尝试了单下划线和双下划线,它们都不起作用。错误由:book.views.BookDetailView引发。它是由另一个视图提出的,但该视图运行良好。@Jinx请尝试icontains。也应该是搜索,而不是“搜索”。不带引号:queryset.filtertile\uuu icontains=search.仍不工作。在book/urls-path'search/'中,views.SearchResultView.as_view,name='search',只要告诉您以防万一。@jinx在urlpattern中交换详细视图和搜索视图。详细视图的模式太常见,由/search/url触发。
class Book(models.Model):

    title = models.CharField(max_length=191, unique=True)

    slug = models.SlugField(unique=True, null=True, allow_unicode=True)

    pub_date = models.DateField()

    ............
class SearchResultView(generic.ListView):
    template_name = 'book/search.html'
    model = Book
    paginate_by = 10

    def get_queryset(self):
        queryset = super().get_queryset()
        search = self.request.GET.get('search')
        if search:
            queryset.filter(title__icontains=search)
        return queryset


class BookDetailView(generic.DetailView):
    template_name = 'book/detail.html'
    model = Book

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['all_categories'] = Category.objects.all()
        return context
app_name = 'book'
urlpatterns = [
    path('', views.HomePageView.as_view(), name='home'),
    path('<slug:slug>/', views.BookDetailView.as_view(), name='detail'),
    path('search/', views.SearchResultView.as_view(), name='search')
]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1> here we go </h1>
</body>
</html>
<form class="form-inline my-2 my-lg-0" method="get" action="{% url 'view_urlname' %}">
    <input style="font-size: 12px; width: 200px" class="form-control mr-sm-2" type="search" placeholder="Book Name" name="search" aria-label="Search">
    <button class="btn btn-outline-primary my-2 my-sm-0" type="submit">Search</button>
</form>
class SearchResultView(generic.ListView):
    template_name = 'book/search.html'
    model = Book
    paginate_by = 100

    def get_queryset(self):
        queryset = super().get_queryset()
        search = self.request.GET.get('search')
        if search:
            queryset.filter(filedname_contains=search)
        return queryset
def get_queryset(self):
    if self.request.method == 'POST':
        book_name = self.request.POST.get('book_name', '')
        return Book.objects.filter(name=book_name)  # i'm assuming that in your Book model the name field if called 'name'
<input name="book_name" style="font-size: 12px; width: 200px" class="form-control mr-sm-2" type="search" placeholder="Book Name" aria-label="Search">