0

ここに、テキスト入力ウィジェットを含むDjangoフォームがあります。text-inputの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

最後の検索をセッションデータに保存し、フォームを初期化するときに初期パラメーターを使用して値を追加するのはどうですか?

だからあなたは次のように見えるでしょう-

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 に答える