【发布时间】:2015-12-10 02:38:19
【问题描述】:
我正在尝试从我的 django 模板调用角度控制器函数,并传递我正在迭代的对象,但它要求我在传递之前先将对象转换为 json,然后在控制器中,我已经再次将 json 解析为对象。
这是sn-p:
Django 模板视图:
class Menu(TemplateView):
template_name = 'menu.html'
def get_context_data(self, **kwargs):
context = super(Menu, self).get_context_data(**kwargs)
# Using the DRF API to fetch the data for template view
menus = requests.get('http://127.0.0.1:8000/api/v1/menus/').json()
context['menu'] = menus
return context
menu.html:
<div class="row" ng-controller="MenuController as vm">
<ul>
{% for menu_item in menu.menu_items %}
<li class="col-xs-12 col-sm-6 col-md-4">
<!-- menu_item is dict type object -->
<button class="btnRed txtUpper"
ng-click="vm.addToCart('{{ menu_item|to_json|escapejs }}')">
Add to cart
</button>
</li>
{% endfor %}
</ul>
</div>
to_json 是我的自定义过滤器:
@register.filter
def to_json(value):
return json.dumps(value)
现在,在我的控制器中,要使用传递的对象,我必须再次将 json 解析为对象:
angular.module('menu', [])
.controller('MenuController', ['$log', function($log) {
this.addToCart = function(menuItem) {
menuItem = JSON.parse(menuItem);
$log.debug('Adding MenuItem to Cart: ' + menuItem);
$log.debug('Adding MenuItem to Cart: ' + menuItem['id']);
};
}]);
所以,我有很多事情要做。有一次很好,但如果我必须为每个模板和角度集成都这样做,那就太多了。有什么优雅的方法可以避免这种情况吗?
【问题讨论】:
标签: python json angularjs django