2013-03-16 2 views
0

텍스트 입력 위젯이 포함 된 여기 장고 양식이 있습니다. 나는 텍스트 입력의 HTML 값 속성을 사용자의 마지막 검색을 반영하도록 변경할 수 있기를 바라고 (잘못 입력 된 쿼리를 빠르게 변경할 수 있도록). 이제 {{ search_form_value }}이 그대로 HTML로 렌더링되기 때문에 스 니펫이 작동하지 않습니다. 나는 {{ search_form_value }}을 채우면서 HTML을 다시 렌더링 할 수 있다고 생각했습니다. 그러나, 어쨌든 보안 관련 문제 (어쩌면 XSS?) 또는 바람직하지 않은 다른 문제를 열 ​​수 있는지 확실하지 않습니다.장고 위젯의 HTML 속성을 동적으로 변경하십시오.

내가하는 일을 할 수있는 관용적 인/더 좋은 방법이 있다면, 나는 모두 귀입니다.

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">

답변

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

단순히를 얻으려면, 값은 다음과 같아야합니다에 결과

'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 }}"> 
+0

그것은 나를에서 작동 :) – catherine

관련 문제