Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django formview在模板中的可见性_Django_Django Forms_Django Views - Fatal编程技术网

Django formview在模板中的可见性

Django formview在模板中的可见性,django,django-forms,django-views,Django,Django Forms,Django Views,我按照这里的教程实现了一个基本的搜索功能: 我想通过在结果页面上显示搜索功能来扩展该教程,允许重复搜索。但是,当我这样做时,我无法让搜索表单显示在搜索结果页面上。搜索按钮显示,但不显示提供输入的字段 相关代码: home.html: <div name="searchform"> <form action="{% url 'search_results' %}" method="get">

我按照这里的教程实现了一个基本的搜索功能:

我想通过在结果页面上显示搜索功能来扩展该教程,允许重复搜索。但是,当我这样做时,我无法让搜索表单显示在搜索结果页面上。搜索按钮显示,但不显示提供输入的字段

相关代码:

home.html:

<div name="searchform">
    <form action="{% url 'search_results' %}" method="get">
        {{ form }}
        <input type="submit" value="Search">
    </form>
</div>
{% block content %}

{% endblock %}
URL.py:


from django.urls import path

from .views import HomePageView, SearchResultsView

urlpatterns = [
    path('search/', SearchResultsView.as_view(), name='search_results'),
    path('', HomePageView.as_view(), name='home'),
]
forms.py:

from django import forms
class SearchForm(forms.Form):
    q = forms.CharField(label='', max_length=50, 
                    widget=forms.TextInput(attrs={'placeholder': 'Search Here'})             
                    )
对于如何解决这类问题(或者如果我公然做了一些非django-y的事情),如有任何建议,我将不胜感激。

class HomePageView(FormView):
模板名称='home.html'
form_class=SearchForm#这行!
记住也要将
form_class
属性应用于
SearchResultsView
,否则,将不会解释任何表单。“提交”按钮之所以显示,是因为它不是呈现表单的一部分。

类HomePageView(FormView):
模板名称='home.html'
form_class=SearchForm#这行!

记住也要将
form_class
属性应用于
SearchResultsView
,否则,将不会解释任何表单。“提交”按钮之所以显示,是因为它不是呈现表单的一部分。

您使用的是ListView,它是一种通用的显示视图。 您需要使用
get
方法,然后您可以传递表单再次进行搜索并停留在同一页面上

class SearchResultsView(View):

    template_name = 'search_results.html'
    form_class = SearchForm

    def get(self, request):
        form = self.form_class()
        query = self.request.GET.get('q')
        context = {}
        context['form'] = form
        context['cities'] = City.objects.filter(
            Q(name__icontains=query) | Q(state__icontains=query)
        )
        return render(self.request, self.template_name, context)
使用ListView可以获得相同的结果,但如果使用其他基于视图的类,效果会更好


你可以查一下文件

您正在使用ListView,它是一个通用的显示视图。 您需要使用
get
方法,然后您可以传递表单再次进行搜索并停留在同一页面上

class SearchResultsView(View):

    template_name = 'search_results.html'
    form_class = SearchForm

    def get(self, request):
        form = self.form_class()
        query = self.request.GET.get('q')
        context = {}
        context['form'] = form
        context['cities'] = City.objects.filter(
            Q(name__icontains=query) | Q(state__icontains=query)
        )
        return render(self.request, self.template_name, context)
使用ListView可以获得相同的结果,但如果使用其他基于视图的类,效果会更好


你可以查一下文件

这+我的模板做了一些修改,谢谢!这+我的模板做了一些修改,谢谢!
class SearchResultsView(View):

    template_name = 'search_results.html'
    form_class = SearchForm

    def get(self, request):
        form = self.form_class()
        query = self.request.GET.get('q')
        context = {}
        context['form'] = form
        context['cities'] = City.objects.filter(
            Q(name__icontains=query) | Q(state__icontains=query)
        )
        return render(self.request, self.template_name, context)