Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/Django设计模式_Javascript_Python_Django_Dry - Fatal编程技术网

Javascript/Django设计模式

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

我只是有一个问题,关于如何使用动态生成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.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标记,稍后可以进行克隆。我真的没有在创建自定义标记或小部件方面弄糟,所以这只是理论。