gpt4 book ai didi

django - 为什么 Django 和 AngularJS 在实现小部件/指令时不遵循他们的 MVC 模式?

转载 作者:行者123 更新时间:2023-12-04 05:17:30 25 4
gpt4 key购买 nike

Django 和 Angular 遵循 MVC(这种方式或另一种方式......)模式,因此应该将 HTML 与代码隐藏分开。

但是在浏览 Django 源代码时,你可以很容易地发现:

class ClearableFileInput(FileInput):
....

template_with_initial = u'%(initial_text)s: %(initial)s %(clear_template)s<br />%(input_text)s: %(input)s'

template_with_clear = u'%(clear)s <label for="%(clear_checkbox_id)s">%(clear_checkbox_label)s</label>'

而不是编写模板并使用 Context 渲染它。


def as_table(self):
"Returns this form rendered as HTML <tr>s -- excluding the <table></table>."
return self._html_output(
normal_row = u'<tr%(html_class_attr)s><th>%(label)s</th><td>%(errors)s%(field)s%(help_text)s</td></tr>',
error_row = u'<tr><td colspan="2">%s</td></tr>',
row_ender = u'</td></tr>',
help_text_html = u'<br /><span class="helptext">%s</span>',
errors_on_separate_row = False)

而不是使用模板标签,或使用外部模板。

与 AngularJS 相同,在主页上的示例中,您可以找到:
  this.addPane = function(pane) {
if (panes.length == 0) $scope.select(pane);
panes.push(pane);
}
},
template:
'<div class="tabbable">' +
'<ul class="nav nav-tabs">' +
'<li ng-repeat="pane in panes" ng-class="{active:pane.selected}">'+
'<a href="" ng-click="select(pane)">{{pane.title}}</a>' +
'</li>' +
'</ul>' +
'<div class="tab-content" ng-transclude></div>' +
'</div>',
replace: true

而不是仅使用 templateUrl 并将模板写入单独的文件而不是代码中。

这有充分的理由吗?或其他一些合理的原因?

我自己没有找到,在编写小部件/指令时,我设法将 html 与代码分开,一切都按预期工作。

最佳答案

这显然是一个糟糕的模式;在 django 的情况下,有人试图在 GSoC 项目中修复它,但它很挣扎,因为 django 模板很慢,简单的字符串格式化要快得多,并且使用模板渲染字段被证明是一个真正的瓶颈。 as_table看起来像是为了向后兼容而保留在源代码中的剩余部分;开发人员不需要使用它。

我没有使用 AngularJS 的经验,但可能是单独文件中的模板意味着额外的 HTTP 请求。

关于django - 为什么 Django 和 AngularJS 在实现小部件/指令时不遵循他们的 MVC 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14081230/

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