2017-11-21 10 views
0

Django {% include %}タグを使用して1つのテンプレートに別のテンプレートの変数を継承させます。しかし、それは起こっていない。Django {%include%}タグは、ハードコードされた文字列を表示しますが、変数を表示しません。

section.html、継承するテンプレート:

section.htmlから word_in_templateを継承する必要があり
{% block section1 %} 
<p>My cows are home.</p> 
--> {{ word_in_template }} <-- 
{% endblock %} 

index.html、:

{% include "section.html" with word_in_template=word_in_template %} 

私も{% include "section.html" with word_in_template=word %}を試してみました。

マイビュー:Chromeでsection.htmlため

def myblog(request): 
    return render_to_response('index.html') 

def section(request): 
    word = "frisky things." 
    return render_to_response('section.html', {'word_in_template':word}) 

出力:

My cows are home. 

--> frisky things. <-- 

Chromeでindex.html用の出力:

My cows are home. 

--> <-- 

私は次のよthis solutionが、それはしません私のために働く。 "frisky things"は、section.htmlをロードするかどうかを示しますが、index.htmlには表示されません。ただし、ハードコードされた文字列My cows are homeindex.htmlに表示されます。

私もdocumentationに従っていると思います。しかし、私は新しいので、私は物事を正しく読んでいないかもしれません。私は間違って何をしていますか?

+0

'render_to_response'は廃止されていることに注意してください。代わりに' render'を使用してください。 – Alasdair

+0

ブロックは、テンプレートの継承を使用して別のテンプレートを拡張する場合に便利です。 '{%extends 'base.html'%}'。 '{%include%}'を使うときは、テンプレートの継承を使わないので、 '{%block section1%}'を 'section.html'テンプレートに含めることは意味がありません。 – Alasdair

+0

これらもありがとう! – nusantara

答えて

1

index.htmlテンプレートにsection.htmlを含めると、sectionビューのコンテキストは自動的には含まれません。 myblogビューにコンテキストを含める必要があります。テンプレートで

def myblog(request): 
    word = "my_word" 
    return render(request, 'index.html', {'word_in_template':word})) 

word_in_templateがコンテキスト辞書内のキーであることから、インクルードには、正しい方法は、word_in_template=word_in_templateです。

{% include "section.html" with word_in_template=word_in_template %} 
+0

これは私にNameErrorを与え、 'name 'という単語は定義されていません。ですから、変数 'word =" frisky things "を' myblog'ビューに追加する必要がありますか? – nusantara

+0

はい、文脈に 'word'を含めると、それをビューで定義する必要があります。 – Alasdair

+0

私が '{%include%}'と思っているだけで、コードをよりDRYにするでしょう。ありがとう! – nusantara

関連する問題