0

我在这里有一个 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">

4

2 回答 2

1

如何在session data中保存最后一次搜索,然后在初始化表单时使用初始参数添加值?

所以你认为会是这样的 -

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})
于 2013-03-16T07:27:06.907 回答
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 }}">
于 2013-03-16T07:38:51.970 回答