2

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をコードから分離することができ、すべてが期待どおりに機能します。

4

1 に答える 1

3

これは明らかに悪いパターンです。django の場合、GSoC プロジェクトで修正する努力がありましたが、django テンプレートは遅く、単純な文字列の書式設定ははるかに高速であり、フィールドのレンダリングにテンプレートを使用することが実際のボトルネックであることが証明されたため、苦労しました。as_table下位互換性のためにソース コードに保持されている残り物のように見えます。開発者はそれを使用する必要はありません。

AngularJS の経験はありませんが、別のファイルのテンプレートが余分な HTTP 要求を意味する場合があります。

于 2012-12-29T11:49:20.477 に答える