Django 不使用 Angularjs

Posted

技术标签:

【中文标题】Django 不使用 Angularjs【英文标题】:Django not working with Angularjs 【发布时间】:2015-02-20 22:13:30 【问题描述】:

当我用 Chrome 打开文件angular.html angularjs 时,html 工作正常,在表格中显示信息数组。但是,当我使用 Django 时,同样的 angular.html 文件,angularjs 并没有显示表格中的信息数组。我不知道该怎么办?

文件angular.html

<html ng-app>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.28/angular.min.js"></script>
    <script>
        function tabela($scope)
            $scope.linhas2=[["Nexus S1","Oi1"],["Nexus S2","Oi2"],["Nexus S3","Oi3"]]               
        
    </script>
</head>
<body>
    <div ng-controller="tabela">
        <table>
            <tr ng-model="item2" ng-repeat="item2 in linhas2">
                <td ng-repeat="item3 in item2"> item3 </td>
            </tr>   
        </table>
    </div>
</body>
</html>

文件views.py

from django.shortcuts import render_to_response

def ang(request):
    return render_to_response("angular.html")

文件 urls.py

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^angular/','bvmfconsulta.views.ang'),
)

Django 找到angular.html,但显示一个空白页面。

【问题讨论】:

为了防止 Angularjs 与 Django 混淆:***.com/a/27282607/2412381 【参考方案1】:

问题在于 Django 和 AngularJS 共享模板中变量替换的相同语法。

最简单的选择是告诉 Django 不要在需要使用 angularjs 变量替换的地方使用它的语法 - 换句话说,使用 verbatim tag:

% verbatim %
    <div ng-controller="tabela">
        <table>
            <tr ng-model="item2" ng-repeat="item2 in linhas2">
                <td ng-repeat="item3 in item2"> item3 </td>
            </tr>   
        </table>
    </div>
% endverbatim %

查看其他选项:

Integrate AngularJS with Django

【讨论】:

【参考方案2】:

确实,您可以使用 % verbatim % 标签。还有另一种方法:您可以更改 AngularJS 标签:

var app = angular.module('dashboardApp').config(function($interpolateProvider) 
    $interpolateProvider.startSymbol('$');
    $interpolateProvider.endSymbol('$');
);

您的代码将转换为:

<html ng-app>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.28/angular.min.js"></script>
    <script>
        function tabela($scope)
            $scope.linhas2=[["Nexus S1","Oi1"],["Nexus S2","Oi2"],["Nexus S3","Oi3"]]               
        
    </script>
</head>
<body>
    <div ng-controller="tabela">
        <table>
            <tr ng-model="item2" ng-repeat="item2 in linhas2">
                <td ng-repeat="item3 in item2">$ item3 $</td>
            </tr>   
        </table>
    </div>
</body>
</html>

通过这种方式,您可以直观地区分 Angular 和 Django 模板标签。干杯!

【讨论】:

以上是关于Django 不使用 Angularjs的主要内容,如果未能解决你的问题,请参考以下文章

与 django-dynamic-formset 一起使用的 Django Formset 不显示删除链接

在不使用 Django 本身的情况下测试自定义 Django 中间件

Django 不使用 Angularjs

django-pipeline 不压缩

如何在不创建 django 项目的情况下使用 Django 1.8.5 ORM?

Django:不推荐使用对 url() 的字符串视图参数的支持,并将在 Django 1.10 中删除