Python 更新Form.initial不会更改Django模板中的初始值 目标
我希望在呈现搜索结果时保留查询 失败的解决方案 这些是最少的代码示例Python 更新Form.initial不会更改Django模板中的初始值 目标,python,django,django-forms,django-views,django-templates,Python,Django,Django Forms,Django Views,Django Templates,我希望在呈现搜索结果时保留查询 失败的解决方案 这些是最少的代码示例 #search_results.html {%csrf_令牌%} {{form}} #views.py ... 类SearchView(TemplateView): “搜索视图” def表单_有效(自身、表单): “”“重定向到具有url参数的成功url”“” quoted_user_query=urllib.parse.quote_plus(form.cleanned_data['user_query'])) 返回Http
#search_results.html
{%csrf_令牌%}
{{form}}
#views.py
...
类SearchView(TemplateView):
“搜索视图”
def表单_有效(自身、表单):
“”“重定向到具有url参数的成功url”“”
quoted_user_query=urllib.parse.quote_plus(form.cleanned_data['user_query']))
返回HttpResponseRedirect(“”.join([self.get_success_url(),quoted_user_query]))
def获取上下文数据(自我。**kwargs):
context=super()。获取上下文(**kwargs)
user\u query=self.request.GET.GET('q',无)
form.initial={'user\u query':user\u query}
返回上下文
def get_success_url(自我):
“”“使用搜索查询追加成功url”“”
如果不是self.success\u url:
raise配置不正确({}没有成功的url)。格式((str(self)))
返回“”。加入([str(self.success_url),'?q=')
第一次在浏览器中搜索时,模板按预期呈现。如果我搜索foo
将呈现以下内容
我认为您没有通过
self.request.GET.GET('q',None)
获得任何值,因为表单中输入字段的名称是user\u query
。所以试着这样做:
class SearchView(TemplateView):
"""Search view"""
def get_context_data(self. **kwargs):
context = super().get_context(**kwargs)
user_query = self.request.GET.get('user_query', None)
context['form'] = SearchBar(initial = {'user_query': user_query})
return context
还将表单方法从post更改为get ie
我发现了一个笨重的解决方案,它创建了一个新的表单实例,而不是更新initial
属性
#views.py
...
类SearchView(TemplateView):
“搜索视图”
额外上下文={'form':SearchBar()}
def获取上下文数据(自我。**kwargs):
context=super()。获取上下文(**kwargs)
user\u query=self.request.GET.GET('q',无)
如果用户查询不是“无”:
context['form']=self.form\u类(数据={'user\u query':user\u query})
返回上下文
...
我在表单验证后向重定向url追加?q=
。我已经用相关的代码更新了我的问题,而更改获取的方法可能是正确的,它没有解决原始问题