我正在尋找一種方法來擴展Django模板/視圖。如何以前瞻性的方式擴展Django視圖/模板
我第一次實現由兩種型號(clients/models.py
)的:
class Client(models.Model):
...
class Address(models.Model):
client = models.ForeignKey(Client)
...
和其相當簡單的模板(clients/detail.html
):
{{client.name}}
Address: {{client.address.street}}, {{client.address.zipcode}} {{client.address.city}}
爲我的應用程序的增長,新的應用誕生了:'發票。
一遍是很簡單的(invoices/models.py
):
class Invoice(models.Model):
client = models.ForeignKey(clients.models.Client)
...
現在我的客戶信息視圖需要顯示的發票,所以我創建和我的「發票」的應用程序重寫clients/detail.html
。
現在有用。
後來我創建了第三個應用程序的「報價單」。 再次我的客戶詳細信息 - 查看需要顯示報價。
如果我在我的'客戶'中創建clients/detail.html
我將失去顯示發票的功能。
因爲'invoices'和'quotes'app是獨立的。
我的第一個想法是創建類似於SubView類 的'invoices'和'quotes'可以擴展然後在某處註冊它們的實現。
模板應該是這樣的:
{{client.name}}
Address: {{client.address.street}}, {{client.address.zipcode}} {{client.address.city}}
{% for view in views %}
<h1>{{view.title}}</h1>
{{view.get_html}}
{% endfor %}
這是一個很好的路要走,我應該使用一個admin.site
樣實施註冊我的子視圖?
嘿喬斯維奇,理想情況下,我想保留'客戶/ detail.html'免於'發票'或'報價'的知識。謝謝你,這是一個很好的做法(+1) – 2012-04-14 12:11:25
@mo。具體而言,所有的「發票」或「引號」具體知識都會放入您包含在主客戶端模板中的模板中。 – 2012-04-14 12:12:44
但如果添加另一個應用程序,我不想再次更改'clients/detail.html',如果我在項目範圍內覆蓋此模板,它可能是一個選項。因爲它知道每個應用程序... – 2012-04-14 12:17:46