我试图从django模板调用一个角控制器函数,并传递我正在迭代的对象,但是它要求我在传递之前首先将对象转换为json,然后在控制器中,我必须再次解析json到object。
下面是片段:
Django TemplateView:
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解析为object:
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']);
};
}]);
所以,我有很多事情要做。有一次,这很好,但是如果我要对每一个模板和角度积分都这么做的话,那就太好了。有什么优雅的方法可以避免吗?
发布于 2015-09-13 23:36:55
您似乎很困惑JS前端和REST后端应该如何工作。这里不需要你的TemplateView。您的JS应该直接向DRF端点发出请求,后者将直接返回JSON。
https://stackoverflow.com/questions/32558959
复制