我想使用AngularJS与Django,但他们都使用{{}}作为他们的模板标签。是否有一种简单的方法来更改其中之一,以使用其他自定义模板标签?
当前回答
你可以试试逐字逐句的Django模板标签 像这样使用它:
< script src = " https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js " > < /脚本> {% verbatim %} < div ng-app = " " > <p>10是{{5 + 5}}</p> < / div > {% endverbatim %}
其他回答
我发现下面的代码很有用。我在这里找到了代码: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)
对于Angular 1.0,你应该使用$interpolateProvider api来配置插值符号:http://docs.angularjs.org/api/ng.$interpolateProvider。
像这样的东西应该可以达到目的:
myModule.config(function($interpolateProvider) {
$interpolateProvider.startSymbol('{[{');
$interpolateProvider.endSymbol('}]}');
});
请记住两件事:
混合服务器端和客户端模板很少是一个好主意,应该谨慎使用。主要问题是:可维护性(难以阅读)和安全性(双插值可能会暴露一个新的安全向量——例如,服务器端和客户端模板本身的转义可能是安全的,但它们的组合可能不安全)。 如果你开始使用在模板中使用{{}}的第三方指令(组件),那么你的配置将破坏它们。(修复等待)
虽然我们对第一个问题无能为力,除了警告人们,但我们确实需要解决第二个问题。
如果你使用django 1.5及更新版本:
{% verbatim %}
{{if dying}}Still alive.{{/if}}
{% endverbatim %}
如果你还在使用appengine上的django 1.2,可以使用下面的命令来扩展django语法…
from django import template
register = template.Library()
class VerbatimNode(template.Node):
def __init__(self, text):
self.text = text
def render(self, context):
return self.text
@register.tag
def verbatim(parser, token):
text = []
while 1:
token = parser.tokens.pop(0)
if token.contents == 'endverbatim':
break
if token.token_type == template.TOKEN_VAR:
text.append('{{')
elif token.token_type == template.TOKEN_BLOCK:
text.append('{%')
text.append(token.contents)
if token.token_type == template.TOKEN_VAR:
text.append('}}')
elif token.token_type == template.TOKEN_BLOCK:
text.append('%}')
return VerbatimNode(''.join(text))
在你的文件中使用:
from google.appengine.ext.webapp import template
template.register_template_library('utilities.verbatim_template_tag')
来源: http://bamboobig.blogspot.co.at/2011/09/notebook-using-jquery-templates-in.html
你总是可以使用ng-bind而不是{{}} http://docs.angularjs.org/api/ng/directive/ngBind
<span ng-bind="name"></span>
我们在Django 'ng'中创建了一个非常简单的过滤器,可以很容易地混合这两者:
foo.html:
...
<div>
{{ django_context_var }}
{{ 'angularScopeVar' | ng }}
{{ 'angularScopeFunction()' | ng }}
</div>
...
ng过滤器看起来是这样的:
from django import template
from django.utils import safestring
register = template.Library()
@register.filter(name='ng')
def Angularify(value):
return safestring.mark_safe('{{%s}}' % value)
推荐文章
- 获取对象的Django管理url
- 在数组中获取所有选中的复选框
- 如何为Firebase构建云函数,以便从多个文件部署多个函数?
- 如何发送推送通知到web浏览器?
- AngularJS:工厂和服务?
- js:将一个组件包装成另一个组件
- 父ng-repeat从子ng-repeat的访问索引
- Django可选url参数
- JSHint和jQuery: '$'没有定义
- 模仿JavaScript中的集合?
- 我如何提高一个响应禁止在django
- 使用Django South进行向后迁移
- 用JavaScript验证电话号码
- 如何在HTML5中改变视频的播放速度?
- 谷歌地图API v3:我可以setZoom后fitBounds?