我想使用AngularJS与Django,但他们都使用{{}}作为他们的模板标签。是否有一种简单的方法来更改其中之一,以使用其他自定义模板标签?
当前回答
如果你正确地分离了页面的各个部分,那么你可以很容易地在“raw”标签范围内使用angularjs标签。
在jinja2
{% raw %}
// here you can write angularjs template tags.
{% endraw %}
在Django模板中(1.5以上)
{% verbatim %}
// here you can write angularjs template tags.
{% endverbatim %}
其他回答
我投票反对使用双括号(())作为模板标签。只要不涉及函数调用,它就可以很好地工作,但当尝试以下方法时
ng:disabled=(($invalidWidgets.visible()))
在Mac上使用Firefox(10.0.2)时,我得到了一个非常长的错误,而不是预期的逻辑。<[]>对我来说很顺利,至少到目前为止。
编辑2012-03-29: 请注意,$invalidWidgets已弃用。然而,我仍然会使用另一种包装而不是双括号。对于任何高于0.10.7的angular版本(我猜),你可以在应用/模块定义中更容易地更改包装器:
angular.module('YourAppName', [], function ($interpolateProvider) {
$interpolateProvider.startSymbol('<[');
$interpolateProvider.endSymbol(']>');
});
API文档。
我发现下面的代码很有用。我在这里找到了代码:http://djangosnippets.org/snippets/2787/
"""
filename: angularjs.py
Usage:
{% ng Some.angular.scope.content %}
e.g.
{% load angularjs %}
<div ng-init="yourName = 'foobar'">
<p>{% ng yourName %}</p>
</div>
"""
from django import template
register = template.Library()
class AngularJS(template.Node):
def __init__(self, bits):
self.ng = bits
def render(self, ctx):
return "{{%s}}" % " ".join(self.ng[1:])
def do_angular(parser, token):
bits = token.split_contents()
return AngularJS(bits)
register.tag('ng', do_angular)
你总是可以使用ng-bind而不是{{}} http://docs.angularjs.org/api/ng/directive/ngBind
<span ng-bind="name"></span>
如果执行任何服务器端插值,唯一正确的方法是使用<>
$interpolateProvider.startSymbol('<{').endSymbol('}>');
其他任何向量都是XSS向量。
这是因为任何没有被Django转义的Angular分隔符都可以被用户输入到插入的字符串中;如果有人将他们的用户名设置为“{{evil_code}}”,Angular会很乐意运行它。但是,如果您使用的字符没有被Django转义,则不会发生这种情况。
如果你正确地分离了页面的各个部分,那么你可以很容易地在“raw”标签范围内使用angularjs标签。
在jinja2
{% raw %}
// here you can write angularjs template tags.
{% endraw %}
在Django模板中(1.5以上)
{% verbatim %}
// here you can write angularjs template tags.
{% endverbatim %}
推荐文章
- 如何使用Jest测试对象键和值是否相等?
- 将长模板文字行换行为多行,而无需在字符串中创建新行
- 如何在JavaScript中映射/减少/过滤一个集?
- Bower: ENOGIT Git未安装或不在PATH中
- AngularJS绑定中的数学函数
- 添加javascript选项选择
- 在Node.js中克隆对象
- Django模型表单对象的自动创建日期
- 为什么在JavaScript的Date构造函数中month参数的范围从0到11 ?
- 使用JavaScript更改URL参数并指定默认值
- 在window.setTimeout()发生之前取消/终止
- 如何删除未定义和空值从一个对象使用lodash?
- 错误:“字典更新序列元素#0的长度为1;2是必需的”
- 我可以在AngularJS的指令中注入服务吗?
- 改变Django的SECRET_KEY的效果