2009-07-11 110 views
1

我目前有兩個應用:如何在Django中包含來自其他應用程序的動態模板?

app1/ 
app2/ 
templates/ 
    app1.html 
    app2.html 

在app1.html,我包括app2.html:

<!-- app1.html --> 
{% include "app2.html" %} 

APP 2有一些動態內容:

<!-- app2.html --> 
{% app2_value %} 

當我顯示app1.html,值app2_value不顯示。在Django中處理上述問題的最佳方法是什麼?

回答

2

Django並不真正處理動態變化,包括像PHP或其他語言一樣。相反,你應該有一個基本模板,並使用模板繼承和塊來完成你想要做的事情。

所以你的app2.html將有相同的動態內容,但有一個地方app1.html要麼覆蓋或插入的東西。然後

app2.html: 

{% block 'title' %} 
{{ app2.title }} 
{% endblock %} 

{% block 'content' %} 
{% endblock %} 

,App1的模板可以延長App2的:

app1.html: 

{% extends "app2.html" %} 

{% block 'title' %} 
Actually App 1! 
{% endblock %} 

{block 'content' %} 
... 
{% endblock %} 

不幸的是,包括裝卸仍然是新的Django和對最佳實踐從我的文檔和社區中見過。

+0

我想我的意圖是讓我的應用程序通過包含處理來重新使用。由於app2.html應該是獨立的,因此我可能必須在視圖方面處理這種邏輯。 – 2009-07-11 21:08:41

0

在Django中,您的視圖和模板相互分離,所以當您在模板中使用{%app2_value%}時,它會假定它已從調用視圖傳遞給它。

因此,要回答你的問題,要獲得該值顯示,把它傳遞給APP1在你使用任何視圖調用它的模板:

# app1 views.py 
from django.shortcuts import render_to_response 
import app2 

def app1_view(request): 
    return render_to_response('app1.html', {'app2_value': app2.somevalue}) 
0

實際上,你可以呈現寺爲字符串,然後將其發送到另一個要顯示的模板。您仍然需要將變異數發送到您要以字符串形式呈現的模板。一個很好的用例是使用相同的模板以特殊方式呈現列表或字符串。

相關問題