私は非常に奇妙な状況で立ち往生しています。templatetag / somefile.pyには、ajax_print_widgetとrender_widgetという名前の2つのメソッドが定義されています。
def ajax_print_widget(request, template, context1 ):
if request.is_ajax():
q = request.GET.get( 'q' )
if q is not None:
data = {
'results': context1,
}
import pdb; pdb.set_trace()
return render_to_response( template, data,
context_instance = RequestContext( request ) )
@register.simple_tag
def render_widget(widget_settings):
widget = widget_settings.get_widget()
template_name = widget.template_name
context = widget.context(widget=widget_settings)
t = get_template("widgets/%s" % template_name)
return ajax_print_widget(t,context)
私の主な動機は、Ajaxを使用してデータを渡し(ajax_print_widgetメソッドをチェックインしているため)、それをテンプレートにレンダリングすることです。残りは、指定されたテンプレート名でjqueryによって処理されます。これを実行するために、私は次の手順を実行しています。
- 1. render_widgetメソッドで、Ajaxの目的に必要な2つの変数、つまりテンプレート名('t')と必要なデータ('context')を取得しています。
- 2.次に、render_widgetから戻るときに呼び出すことにより、これら2つの変数をパラメーターとしてajax_print_widgetメソッドに渡す必要があります(コードを参照)。
- 3.ご覧のとおり、追加のパラメーター、つまりajax _...メソッドの「request」が必要です( `request.is.ajax():`をチェックするために必要です)。しかし、私はこのパラメーターをajax..methodに送信する方法を見つけることができません
私はこれを書いてみました:
return ajax_print_widget(request, t, context)
しかし、エラーが表示されています。つまり、リクエストはグローバル変数ではありません(これは明らかです)。コードの残りの部分を上に貼り付けたままにしておくと、別のエラーが表示されます。つまり、ajax_printは3つの引数を取り、2つが与えられます(右)。この問題を解決するためのヒントが得られず、リクエストを渡さないとうまくいきません。
それとは別に、テンプレートタグについて疑問があります。このrender_widgetメソッドを検索しても、呼び出されたファイルは見つかりませんでした。テンプレートタグの意味も教えてください。テンプレートタグで定義されたメソッドはどこかから呼び出されますか、それともテンプレートタグでこれを書くのはなぜですか?