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