【问题标题】:django custom tags with template blocks?带有模板块的django自定义标签?
【发布时间】:2011-01-02 01:11:48
【问题描述】:

我刚开始学习 django 中的自定义标签,想知道是否有一个功能可以像块/标签一样注入数据。

真正的问题是,标签工作得很好,但是假设我的标签是一些 html 和 javascript,这是否意味着我必须调用两个标签函数并以这种方式将它们注入页面。似乎解决方案是使用一个模板来填充块并以这种方式附加数据,但这不能做自定义标签需要做的事情。那么你将如何解决这样的问题呢?

【问题讨论】:

  • 您可能需要让我们知道您要解决的确切问题“注入 HTML 和 JavaScript”并没有太多工作要做。
  • 抱歉,假设我的自定义标签是一个分页功能,可以列出页面。当用户点击页码时,页面会执行一个 ajax 请求来重新填充数据的主体。现在,如果我想在另一个页面上使用相同的分页功能,我需要两个自定义标签,将 html 和 javascript 都放在页面上。有更好的方法吗?再次,指的是几乎像solutoin这样的模板,您可以在其中将javascript附加到某个块并将html附加到另一个块?

标签: django


【解决方案1】:

你需要使用djangoinclusion tags

事实上,django admin 本身使用这些标签的目的非常相似。

从文档中,定义一个这样的函数,它知道它需要从哪个模板渲染

@register.inclusion_tag('results.html')
def show_results(poll):
    choices = poll.choice_set.all()
    return {'choices': choices}

还有模板:

<ul>
{% for choice in choices %}
    <li> {{ choice }} </li>
{% endfor %}
</ul>

然后你插入一个标签如下:

{% show_results poll %}

这将提供:

<ul>
   <li>First choice</li>
   <li>Second choice</li>
   <li>Third choice</li>
</ul>

【讨论】:

  • 嗨,感谢您的回复 :) 你知道吗,最初我想将所有 javascript 集中到头部,这就是为什么我提到我想在页面上的两个不同位置加载脚本.仔细想想,我想javascript在哪里并不重要,对吧?如果每个项目都有自己的脚本和 onload 函数,会不会减慢速度?如果没有,那么用 html 加载 javascript 毕竟可能不是一件坏事。
  • 你可以在header中加载js,在加载的html中忘记它;或者您可以在每个块中加载带有 html 的 js。您必须根据出现的页面数和每个页面中出现的次数进行权衡。
猜你喜欢
  • 2021-07-13
  • 2015-03-16
  • 2015-01-20
  • 2012-03-15
  • 1970-01-01
  • 2016-06-09
  • 2015-12-17
  • 2011-03-31
相关资源
最近更新 更多