2011-08-11 29 views
1

私はいくつかのものを検索するために、このような種類のものを検索するためにサイドバーフォームを構築しようとしていますhttp://cl.ly/0e0R1T0G3B1x0c451F22ここで、人はウェブサイトの任意の部分の特定のパラメータを検索できます。どこにでも表示することができます。Djangoサイドバーのフォーム

ビューはウェブサイトのサイドバーにフォームを渡していないようですが、空のフォームを常にサイドバーとして送信するにはどうすればいいですか?

私は可能な限り明確にしようとしていますが、私はそれが十分ではないかもしれないことを知っています。

これは、イムは、ジャンゴ・ユニフォーム

class HorizRadioRenderer(forms.RadioSelect.renderer): 
""" this overrides widget method to put radio buttons horizontally 
    instead of vertically. 
""" 
def render(self): 
    """Outputs radios""" 
    return mark_safe(u'\n'.join([u'%s\n' % w for w in self])) 

class results_fixt_SearchForm(forms.Form): 

league_search = forms.ChoiceField(choices=[ (league.slug, league.title) for league in League.objects.all()]) 
radios = forms.CharField(widget=forms.RadioSelect(renderer=HorizRadioRenderer, 
       choices=(('table','Table'),('results','Results'), ('fixtures', 'Fixtures'),)), required=True) 


# uniForm Helper 
helper = FormHelper() 

layout = Layout(
    Fieldset('', 
     'league_search', 'radios' 
    ) 
) 
helper.add_layout(layout) 

# Submit button(s) 
submit = Submit('submit','Submit') 
helper.add_input(submit) 


class Meta: 
    fields = ['search_term', 'radios'] 

def __init__(self, request, *args, **kw): 
    super(results_fixt_SearchForm, self).__init__(*args, **kw) 
    self.request = request 

を使用すると、これはHTMLテンプレート

<form action="{% url results_fixt_search %}" method="get" enctype="multipart/form-data" id="results_fixt_search" class="select-form"> 
    {% with results_fixt_search_form.helper as helper %} 
     {% uni_form results_fixt_search_form helper %} 
    {% endwith %} 
</form> 

そしてこれであることに注意してください、これはフォームでビュー

@render_to(template='league/common_fragments/sidebar_fixturesandresults.html') 
def results_fixt_search(request): 
results_fixt_search_form = results_fixt_SearchForm(request) 

return {'results_fixt_search_form': results_fixt_search_form, } 

ですURL

url(r'^(?i)results_fixt/search/$', 'results_fixt_search', {}, name='results_fixt_search'), 
+0

コードを追加してスクリーンショットにリンクする方法がより明確になります。 – agf

+0

ビューのコードを貼り付けることができますか(少なくともあなたが使用している機能)、フォームのhtml部分も素晴らしいでしょう。 – bx2

+0

コードを確認したり、手伝ったりするのに気を付ける人は誰ですか? :) – maumercado

答えて

0

ます(レンダリングするためのDjangoのフォームを使用せずに)直接フォームのHTMLを含むことができ、次のいずれか

<form action = '{% url search %}' method='GET'> 
    <label>Query: <input type='search' name='query'></label> 
    <input type='submit' value='Go'> 
</form> 

またはコンテキストプロセッサを使用して、すべてのビューにフォームインスタンスを渡す:次に

def search_form_processor(request): 
    return {'search_form': SearchForm()} 

とレンダリング書式:

<form action = '{% url search %}' method='GET'> 
    {{ search_form.query.label_tag }} {{ search_form.query }} 
    <input type='submit' value='Go'> 
</form> 

フォームは、独自のビューで独自のURLで処理されます。

+0

リクエストコンテキストに追加するには、template_context_processor設定にview関数を追加する必要があります。 – maumercado