gpt4 book ai didi

python - Django:实现嵌套的、可重用的组件设计

转载 作者:太空狗 更新时间:2023-10-29 21:58:51 25 4
gpt4 key购买 nike

我正在使用 Django 开发一个大型社交网络应用程序,我希望在其中多次使用某些前端组件,并且通常具有以自定义组件包含其他自定义组件的方式设计的功能,这些组件可能包含更小的组件子组件(无穷大)。所有这些组件通常都是动态生成的。我试图找出在 Django 框架中构建它的最佳方法,这样我的组件就易于维护并具有清晰的编程接口(interface)。严重依赖全局上下文似乎与此相反,但是,我可以看到通过在 View 中一次执行所有查询来避免冗余查询的优势。

自定义包含模板标签似乎很适合实现组件,但我想知道,高度嵌套的模板标签会产生性能问题,还是解析架构会阻止这种情况发生?使其在 View 级别 self 记录的最佳方式是什么?渲染主页模板、自定义标签和所有内容需要什么上下文?我认为尝试正确维护代码以设置模板上下文是一场小噩梦。最后,维护这些组件的 CSS 的最佳方式是什么?

请随意提出用于创建嵌套组件设计的其他推荐方法。

最佳答案

到目前为止我决定的解决方案是继续使用包含标记库作为我的可重用组件集。我坚持尽可能多地在我的 View 代码中设置所有查询,并在我的上下文中预先设置它们——没有在模板或标记库代码中生成新查询的函数。包含模板包含项目的所有标记,样式进入主站点样式表,遵循 SMACSS 的指南,使我的类尽可能通用和可重用。 .我仅在 DRY 需要时将组件重构为包含标签。

我最初让我的包含标签函数明确地接受标签模板使用的参数,这样:

页面模板

<div>{% my_tag param1 param2 %}</div>

标签库

@register.inclusion_tag('myapp/tagtemplates/my_tag.html')
def my_tag(param1, param2):
return {'param1': param1, 'param2': param2}

my_tag.html

<div>Blah: {{ param1 }}</div>
<div>Blip: {{ param2 }}</div>

...显然 View 设置了上下文。

但我决定改用 takes_context 参数来避免在标记库中显式定义参数。太多的重复导致文档中没有足够的 yield 。到目前为止,我的组件非常简单,从标签模板的检查中可以清楚地看出依赖关系。我担心这对于复杂的嵌套组件来说可能是 Not Acceptable ,但我总是可以让我的标记库函数在需要的地方变得冗长。

从维护的角度来看,我对这种设置并不完全满意。我不喜欢我将不得不手动跟踪不再需要哪些上下文数据。我不喜欢我的 CSS 类必须小心命名以避免冲突这一事实。

我仍然对新的解决方案持开放态度,因为我不确定我所决定的是否真的是最佳实践。

关于python - Django:实现嵌套的、可重用的组件设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351694/

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