结合ng repeat和django模板语言

时间:2016-01-18 20:10:33

标签: javascript python angularjs django

我有一个表随着时间的推移会有不同的列,我希望我的django视图支持那些更改列。我也想用ng-repeat做一些奇特的东西,比如过滤和其他东西。但是我在将两者结合起来时遇到了麻烦。

我使用django模板语言传递任意col_namespackages也使用django模板语言发送,并且本质上是一个json数组,其中每一行都是dict映射col_name到某个值。即。

$scope.packages = [{'col1': 'row1col1', 'col2': 'row2val2'}, {'col1': 'row2col1' .... 

然而,当我使用packages输入行时,我无法"嵌套"我的模板。有没有办法从`packages?

中的每一行中获取任意值
<input ng-model="search" placeholder="Search">
        <table style="width:100%;">
            <thead>
                <tr>
                    <th>Permanent Column 1</th>
                    <th>Permanent Column 2</th>
                    {# changing columns #}
                    {% for col_name in col_names %}
                        <th>{{ col_name }}</th>
                    {% endfor %}
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="package in packages | filter:searchPackage">
                    {% for col_name in columns %}
                        <td>{{package.{{ col_name }}}}</td>  DOESN'T WORK!
                    {% endfor %}
                </tr>
            </tbody>
        </table>

在该问题中,我基本上想要{{package.ACTUAL_ARBITRARY_COL_NAME}},但我不知道如何以编程方式执行此操作

1 个答案:

答案 0 :(得分:2)

问题

默认情况下,Django和AngularJS使用相同的标记{{}}进行模板化。

所以这首先由Django模板处理

{% for col_name in columns %}
    <td>{{package.{{ col_name }}}}</td>  DOESN'T WORK!
        ^                        ^
        |________________________| 
         Django template will try to process this value

因为Django试图扩展第一个{{...}}内的内容,所以你不会得到你希望AngularJS看到的东西。

If you want to continue down that road, I suggest you read some solutions to this problem here

更好的解决方案

更好的方法是为AngularJS提供您希望Django为您循环的项目。

$scope.columns = [...];

Then use AngularJS to do all the loops。无论你采用哪种方式,如果你需要在AngularJS中完成它,最好在AngularJS中完成所有操作而不是半Django半AngularJS。