动态改变Django Widget的HTML属性

时间:2013-03-16 04:36:54

标签: python html django forms

我这里有一个包含文本输入小部件的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">

2 个答案:

答案 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 }}">