创建一个自定义模板标签以替换for循环-Django



我试图通过为django Web应用程序上经常使用的'for loop'的自定义模板标签来简化我的代码。我认为这是一个简单的直接过程,但是有些事情不正确...我可以用一些帮助来捕获我的错误。

这是我的代码。views.py

 class ArticleView(DetailView):
    model = Articles
    def get_context_data(self, **kwargs):
      context = super(ArticleView, self).get_context_data(**kwargs)
      context['s_terms'] = scientific_terms.objects.all()
      return context

模板标签

@register.filter(name='term')
def term(value):
  {% for term in s_terms %}
        {{ term.short_description }}
  {% endfor %}

template.html

{% Neurons|term %}

谢谢您的帮助。

您将python代码与django模板语言混合。模板标签是普通的Python代码,因为它们在Python模块中定义。一个工作的例子是:

@register.filter(name='term')
def term(terms):
  output = ''
  for term in terms:
      output = '{0} {1}'.format(output, term.short_description)
  return output

然后您可以这样使用:

{{ s_terms|term }}

也许您想要的只是创建可重复使用的Django模板。

例如,创建一个名为 terms.html 的新模板:

模板/terms.html

{% for term in terms %}
    <p>{{ term.short_description }}</p>
{% endfor %}

然后,在另一个模板中,您可以 include 此部分模板:

模板/index.html (名称只是一个示例(

{% extends 'base.html' %}
{% block content %}
    <h1>My application</h1>
    {% include 'terms.html' with terms=s_terms %}
{% endblock %}

最新更新