2012-03-07 14 views
0

私はDjangoを使ってウェブサイトを構築しています。カスタムテンプレートタグテンプレート内から自分のテンプレート変数にアクセスするにはどうすればよいですか?

TEMPLATE_CONTEXT_PROCESSORS = (
     ... 

    "mysite.context_processors.mystandardvariables" 
) 

これは私が、このようなSITE_NAMEやSITE_ROOTなどのテンプレートで使用したいいくつかの標準的な変数を追加します。

私はこのようになりますコンテキストプロセッサを設定しています。

私は最初のカスタムテンプレートタグを作成しましたが、私はこれらの標準変数にアクセスすることができません。

エラーは表示されず、ページにはOKと表示されます。必要な変数は使用できません。

利用可能な変数を確認するには、既に{% debug %}を使用してください。

私のタグは次のようになります。

@register.inclusion_tag('search/search_snippet.html', takes_context = True) 
def search(context): 
    form = forms.SearchForm() 
    return {'form': form } 

タグ用のテンプレートは次のようになります。

<form action="{{ SITE_ROOT }}search" method="post"> 
    {% csrf_token %} 
    <table> 
     {{ form.as_table }} 
    </table> 
    <input type="submit" value="Submit"> 
</form> 

私はこのような私のホームページに検索タグを含めています:

{% extends "base.html" %} 
{% load search_tags %} 

{% block content %} 

{% search %} 

{% endblock %} 
+1

あなたが探しているキーが 'context'にないと確信していますか? – Brandon

+0

ありがとう、彼らはそうだね!私は私の 'フォーム'変数をマージして 'コンテキスト'を返さなければならないと思いますか? –

+0

いいえ、変数をマージする必要はありません。コンテキスト内の変数をキーで把握できるようになります。そのキーを使用して、インクルードタグが取得して何かを行うことができます。 'context.get( 'SITE_NAME'、None)' – Brandon

答えて

0

私自身の質問に答えるために、私は通常のテンプレートタグをインクルードtaよりも使いたい方法を考え出しましたg。

@register.tag 
def search(parser, token): 
    return SearchNode() 

class SearchNode(template.Node): 
    def render(self, context): 
     return render_to_string('search/search_snippet.html', 
           { 'form' : forms.FindForm() }, context) 

ここでは、テンプレートを文字列にレンダリングする関数にコンテキストを渡しています。

私はこれを組み込みタグとして実装したいと思っていましたが、これは動作が少ないようですが、どのように動作させるかはわかりませんでした。

このタグを含むタグを使用する方法を知っている人は、答えてください。あなたの質問を正しい答えとしてマークします。

関連する問題