我正在尝试通过为我的Django Web应用程序上经常使用的'for循环'创建自定义模板标记来简化我的代码。我认为这将是一个简单的直接过程,但有些东西不正常...我可以使用一些帮助来捕捉我的错误。
这是我的代码。 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 %}
提前感谢您的帮助。
答案 0 :(得分:1)
您正在将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 %}
然后,在另一个模板中,您可以包含此部分模板:
templates / index.html (名称只是一个例子)
{% extends 'base.html' %}
{% block content %}
<h1>My application</h1>
{% include 'terms.html' with terms=s_terms %}
{% endblock %}