Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Django和AngularJS在实现小部件/指令时不遵循MVC模式?_Django_Model View Controller_Design Patterns_Angularjs - Fatal编程技术网

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

为什么Django和AngularJS在实现小部件/指令时不遵循MVC模式?,django,model-view-controller,design-patterns,angularjs,Django,Model View Controller,Design Patterns,Angularjs,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_w

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>'
而不是编写模板并使用上下文呈现它

而不是使用templatetags,或者使用外部模板

与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_表看起来像是保留在源代码中用于向后兼容的剩余内容;开发人员不需要使用它


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

作为一个示例,如果所有代码都捆绑在一起,看起来更清晰。这里只有一些例子。@asgoth我认为把html放在javascript字符串中从来都不清楚,但是谢谢你的评论。我知道你的意思。我只是想展示一个特定功能的小例子,有时最好让它一起查看,否则学习曲线可能会更难。我同意这不应该用于生产代码。是的,在angular中,这意味着一个额外的HTTP请求,但他们的框架就是这样工作的,并且总是可以像GWT一样在第一页加载时加载所有视图来避免它。关于django,对于非常简单的小部件,我看到了如何将html编写为字符串,但在尝试编写更复杂的小部件时,这是不可能的。
  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