我有一个由Django呈现的模板,填充了我在视图中传递的上下文。 但我需要在客户端重新编译此模板,并使用新上下文。
经过一番研究后,我终于遇到了MustacheJs,但信息的泄漏给我带来了一些疑问。我是否只需要编写一个template.mustache,并且Javascript 和 Django都可以编译它吗?
似乎Mustache语法使用了一些符号,如:
{{#items}} {{/items}}
而Django是
{% for item in items %}
他们对我来说看起来很不一样...... 实际上我甚至都不知道Mustache是否是我需要的,是否有可能做我想做的事情?
好的,让我解释一下我需要什么。 我有这个模板:
items.html :
<form action="item/add/">
<input type="text" class="item-name" name="name">
<input type="submit" value="New Item">
</form>
{% if items %}
<ul class="item-list">
{% for item in items %}
<li>
{{ item.name }}
</li>
{% endfor %}
</ul>
{% endif %}
此模板由视图:
编译def items(request):
items = Item.objects.all()
context = {
'items': items
}
return render_to_template('items.html', context)
因此,此模板由服务器端编译和呈现。 现在让我们说用户点击添加了一个新项目,这个函数运行了:
addItem: function addItem() {
var action = this.$form.attr('action');
$.post(action, {
name: this.$itemName.val()
}, function(response) {
if (response.success) {
// LOAD FROM THE SAME TEMPLATE DJANGO DID
var newItem = loadTemplate('items.html', {
item: response.item
});
this.$itemList.append(newItem);
}
});
}
我需要的是这个loadTemplate
解析器库,如果存在,我不会,但它确实如此,这就是我想要的!
答案 0 :(得分:1)
最好在单个文件中使用Django模板或Mustache模板。像django-jstemplate这样的解决方案在支持两者方面都有很大帮助。使用{{ variable }}
时会有意义冲突,因为Django和Mustache都会尝试解释它。请注意这一点。
另一个更简单的选择是在verbatim块中包含Mustache模板。 Django模板不会处理这些块。