2

情報を表示するための素晴らしいウィジェットがあり、フォームを使用せずにテンプレートで使用したいと思います。

私のテンプレートは情報を表示するためだけに使用されており、送信するフォームはありません。フォームを使用せずに、このウィジェットをテンプレートでレンダリングするにはどうすればよいですか。ウィジェットがいくつかのユーザーデータでフィードされていることを考慮に入れる必要があります。これにテンプレートタグを使用できますか?

ありがとう!

4

2 に答える 2

3

フォームを使用しない場合の一般的な方法は、フォーム内にあるはずのオブジェクトを使用しないことです。基本的に、ウィジェットのHTMLコードとMixin(通常はクラスベースのビューのみを使用しようとしているため)またはウィジェットの正しいコンテキストパラメーターを生成する関数を使用して、djangoテンプレートを作成します。

これにより、HTMLとHTML、およびロジックとロジックが保持されます。情報を表示するためだけに使用される場合は、ウィジェットである必要はありません。

ウィジェットが必要な場合は常に、ビューでミックスインが(機能)またはミックスイン(クラスベース)と呼ばれていることを確認し、ウィジェットテンプレートを{%include%}して、テンプレートレンダラーに任せます。

于 2012-08-30T01:35:56.697 に答える
3

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を書くこともできます。

于 2012-08-30T01:38:04.767 に答える