Javascript 如何在django for循环中显示/隐藏特定元素

Javascript 如何在django for循环中显示/隐藏特定元素,javascript,jquery,python,angularjs,django,Javascript,Jquery,Python,Angularjs,Django,嗨,我和一些AngularJ一起在一个由Django驱动的网站上工作。我有如下django模板 <div ng-app="MyApp" ng-controller="MyCtrl"> <script src="{{ STATIC_URL }}js/bootstrap.min.js"></script> <div class="well "> {% for k, m in items %} &l

嗨,我和一些AngularJ一起在一个由Django驱动的网站上工作。我有如下django模板

<div ng-app="MyApp" ng-controller="MyCtrl">
    <script src="{{ STATIC_URL }}js/bootstrap.min.js"></script>
    <div class="well ">
        {% for k, m in items %}
            <table ng-show="show" class="table table-bordered tbl" ng-cloak>
              <tr align="left">
                <span>
                    <button ng-click="show=!show" class="btn btn-default drop">
              ..............

{%k,m在项目%}
..............
还有angularjs

{% block extra_js %}
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script>
var app = angular.module('MyApp', []);

app.controller('MyCtrl', function($scope) {
    $scope.show = false;
});
</script>
{% endblock extra_js %}
{%block extra_js%}
var-app=angular.module('MyApp',[]);
应用程序控制器('MyCtrl',函数($scope){
$scope.show=false;
});
{%endblock额外_js%}

我在这里试图实现的是,每当用户单击表中的按钮时,表就会隐藏,反之亦然。但是,根据代码,当用户单击按钮时,所有表(记住,由于它位于for循环中,因此将有多个表)都隐藏起来,而不是该特定表。是否只需要隐藏特定的表?而不是所有的桌子?提前感谢。

已经有一段时间了,但如果我没记错的话,您需要向表中添加一个类,以将其标识为您要隐藏的类。然后在那里你有按钮。单击后,您可以执行一些类似element.closest的操作,以抓取所单击按钮的父表。从那里你可以调用.toggle(),如果没有别的,Django会使用字段_name_1..2..3来保存表ID的状态,这样你就可以将类分配给按钮并获取附加的数字作为标识符,但这样做有点草率。

建议不要使用Django模板,但要将变量作为JSON对象传入,并让Angular执行所有模板化。您可以通过Ajax发送它们,或者在最简单的情况下,只需将它们作为Django模板上下文传递,然后将它们添加到页面顶部的内联脚本中的
窗口
对象。然后,您可以从角度控制器中的
窗口
访问它们。这两种解决方案都会产生更整洁的代码,而第二种解决方案的实现不会比您现有的更费力

如果你真的想沿着你所走的路继续走下去,你可以试试下面的方法。您的javascript变量
show
可以成为一个对象,使用Django对象id作为键(不确定您在
{%for k,m in items%}
循环中迭代的Django对象是什么,但您可以使用它们拥有的任何唯一id。)

所以它看起来像这样:

{% for k, m in items %}
    <table ng-show="show[{{ k }}]" class="table table-bordered tbl" ng-cloak>
        <tr align="left">
            <span>
                <button ng-click="show[{{ k }}] =! show[{{ k }}]" class="btn btn-default drop">
app.controller('MyCtrl', function($scope) {
   $scope.show = {};
});