我正在寻找一种方法来扩展 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
在我的“客户”中创建,我将失去显示发票的能力。
因为“发票”和“报价”应用程序是独立的。
我的第一个想法是创建类似 SubView 类的东西,它可以扩展“发票”和“报价”,然后在某处注册它们的实现。
模板应如下所示:
{{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
的实现来注册我的子视图吗?