Javascript/Django设计模式
我只是有一个问题,关于如何使用动态生成html的javascript实现DRY。我有一个动态加载并由django模板a la填充的元素列表Javascript/Django设计模式,javascript,python,django,dry,Javascript,Python,Django,Dry,我只是有一个问题,关于如何使用动态生成html的javascript实现DRY。我有一个动态加载并由django模板a la填充的元素列表 {{ tag.title }} {% if request.user.is_authenticated %} <a name="del-tag" data-id="{{ tag.id }}" class = "tag-x" title="Remove Tag" href="#">x</a> {% endif %} {{tag.tit
{{ tag.title }}
{% if request.user.is_authenticated %}
<a name="del-tag" data-id="{{ tag.id }}" class = "tag-x" title="Remove Tag" href="#">x</a>
{% endif %}
{{tag.title}
{%if request.user.u经过身份验证%}
{%endif%}
现在,我有了一些javascript,它们也可以通过ajax加载新标记。以下是相关部分:
var newTag = "<span class = \"tag\">" + tagName + "<a name=\"del-tag\" data-id=\"" + tag_id + "\"" +
"class = \"tag-x\" title=\"Remove Tag\" href=\"#\">x</a></span>";
$('#tags').append(newTag);
var newTag=“”+标记名+”;
$(“#标记”).append(newTag);
我可以避免在javascript中重复HTML吗
谢谢。jquery(我假设您使用的是jquery)有一个可以克隆DOM元素的功能。假设您能够克隆一个已经存在的html元素并更改属性的值,然后将其追加回DOM。我自己没有做过,但理论上应该可以用。可以用它。是的,你可以这样做。在单独的模板中具有所有标记生成功能。然后有一些生成标记的url。像这样:
www.example.com/tags/?tags=tag1,tag2,tag3
这将产生:
然后,在代码中执行AJAX调用时,执行以下操作:
$('div.tags').load('www.example.com/tags/?tags=tag1,tag2,tag3')
在Django/template方面,您需要找到一种方法,如何将URL返回的结果包含到页面模板体中。我不确定Django template engine提供了什么工具,但在第一个视图中,您似乎可以将此代码放入某个视图方法中,并将此视图扩展到任何需要的地方,提供如下模板变量render(…,tags=self.generate_tags(args))
,在模板中,它只是{tags}
/tags/?tags=…
和常规page/page/
调用都可以重新使用生成\u tags()
方法
希望能有所帮助但如果一开始就没有元素怎么办?我没有可以克隆的dom元素。嗯,这是一个有趣的问题。我真的想不出一个我喜欢的解决方案,这也是干的。我现在唯一能想到的是创建一个定制的Django标记或小部件,它允许您根据传递给它的值生成所需的HTML标记。然后,您可以呈现一个隐藏的HTML标记,稍后可以进行克隆。我真的没有在创建自定义标记或小部件方面弄糟,所以这只是理论。