情報を表示するための素晴らしいウィジェットがあり、フォームを使用せずにテンプレートで使用したいと思います。
私のテンプレートは情報を表示するためだけに使用されており、送信するフォームはありません。フォームを使用せずに、このウィジェットをテンプレートでレンダリングするにはどうすればよいですか。ウィジェットがいくつかのユーザーデータでフィードされていることを考慮に入れる必要があります。これにテンプレートタグを使用できますか?
ありがとう!
情報を表示するための素晴らしいウィジェットがあり、フォームを使用せずにテンプレートで使用したいと思います。
私のテンプレートは情報を表示するためだけに使用されており、送信するフォームはありません。フォームを使用せずに、このウィジェットをテンプレートでレンダリングするにはどうすればよいですか。ウィジェットがいくつかのユーザーデータでフィードされていることを考慮に入れる必要があります。これにテンプレートタグを使用できますか?
ありがとう!
フォームを使用しない場合の一般的な方法は、フォーム内にあるはずのオブジェクトを使用しないことです。基本的に、ウィジェットのHTMLコードとMixin(通常はクラスベースのビューのみを使用しようとしているため)またはウィジェットの正しいコンテキストパラメーターを生成する関数を使用して、djangoテンプレートを作成します。
これにより、HTMLとHTML、およびロジックとロジックが保持されます。情報を表示するためだけに使用される場合は、ウィジェットである必要はありません。
ウィジェットが必要な場合は常に、ビューでミックスインが(機能)またはミックスイン(クラスベース)と呼ばれていることを確認し、ウィジェットテンプレートを{%include%}して、テンプレートレンダラーに任せます。
render
カスタムWidgetクラスにウィジェットのメソッドを実装します。
render(self, name, value, attrs=None)
renderメソッドは、ウィジェットのhtml表現を担当します。たとえば、のrenderメソッドはTextInput
次のhtmlを返します。
>>> name = forms.TextInput(attrs={'size': 10, 'title': 'Your name',})
>>> name.render('name', 'A name')
u'<input title="Your name" type="text" name="name" value="A name" size="10"/>'
次に、renderメソッドの戻り値をビューのコンテキストに追加できます。
def my_view(request):
widget_html = MyCustomWidget.render(...)
return render_to_response(..., {'widget_html': widget_html})
これで、次を使用してテンプレートにウィジェットを表示できます。
{{ widget_html }}
@ablmが提案したようにtemplatetagを書くこともできます。