gpt4 book ai didi

python - 如何以前瞻性方式扩展 Django View /模板

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:24 24 4
gpt4 key购买 nike

我正在寻找一种扩展 Django 模板/ View 的方法。

我的第一个实现包含两个模型(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)
...

现在我的客户详细信息 View 需要显示发票,因此我在“发票”应用中创建并覆盖了 clients/detail.html

现在很好。

后来我创建了第三个应用程序“quotes”。同样,我的客户详细信息 View 需要显示报价。

如果我在我的“客户”中创建 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 的实现来注册我的 subview 吗?

最佳答案

在 Django 中,urls.py 中的一个 url 理想情况下应该使用 one view,只是为了保持简单.

因此,我会采用将所有必需的上下文放入此屏幕的一个 View 中的方法(我认为您已经通过模型中的外键获得了它)。然后,我不会做你所谓的“ subview 类”,而是使用 Django 模板 include tag .

例子:

{% for invoice in client.invoices %}
{% include "invoice-detail.html" with invoice=invoice %}
{% endfor %}

这会为客户端 的所有发票呈现每张发票的详细信息。注意这是如何符合 DRY principle 的.

关于python - 如何以前瞻性方式扩展 Django View /模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10153430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com