我这里有一个包含文本输入小部件的Django表单。我希望能够更改文本输入的HTML值属性以反映用户的上次搜索(因此他们可以快速更改输入错误的查询)。现在,下面的代码段不起作用,因为{{ search_form_value }}
在字面上呈现在HTML中。我以为我可以重新渲染HTML,填写{{ search_form_value }}
。但是,我不确定这是否会以某种方式打开我与安全相关的问题(可能是XSS?),或其他任何不可取的事情。
如果有一种惯用的/更好的方式来做我想做的事情,那我就全都听见了。
class SearchForm (forms.Form) :
_search_attrs = {'class' : 'some_css_class',
'title' : 'a title',
'placeholder' : 'a placeholder',
'value' : '{{ search_form_value }}'}
search = forms.CharField(max_length=100, label='',
widget=forms.TextInput(attrs=_search_attrs))
当所有的说完成后,我希望客户看到的HTML看起来像这样:
<input class="some_css_class" maxlength="100" placeholder="a placeholder" title="a title" type="text" value="the users last search">
答案 0 :(得分:1)
如何在session data中保存上次搜索,然后在初始化表单时使用initial parameter添加值?
所以你认为会像 -
def your_view(request):
if request.method == 'POST':
# process form
request.session['last_search'] = request.POST['search']
return HttpResponse()
else:
form = SearchForm(initial={'search': request.session.get('last_search')
return render(request, 'search_page.html', {'form': form})
答案 1 :(得分:1)
要简单地得到它,值必须是:
'value' : '{{ request.GET.search }}'}
结果:
<input class="some_css_class" maxlength="100" placeholder="a placeholder"
title="a title" type="text" name="search" id="id_search"
value="{{ request.GET.search }}">