我有类似的 html 片段,我想将其制作为单独的模板,包括:
...
<div class='item'>
<div class='header'>It's a header 1</div>
<div class='text'>It's a text for paragraph 1.</div>
</div>
<div class='item'>
<div class='header'>It's a header 2</div>
<div class='text'>You have {{points}} point{{points|pluralize}}</div>
</div>
...
我制作了一个包含模板item.html:
<div class='item'>
<div class='header'>{{header}}</div>
<div class='text'>{{text}}</div>
</div>
并将第一个片段替换为:
{% include "item.html" with title="It's a header 1" text="It's a text for paragraph 1." %}
{% include "item.html" with title="It's a header 2" text="You have {{points}} point{{points|pluralize}}" %}
在我们使用“points”上下文变量的情况下如何应用过滤器“pluralize”以及如何应用变量“points”的值?
现在我们有了You have {{points}} point{{points|pluralize}}
输出。
我可以在没有自定义模板标签/过滤器的情况下做到这一点吗?
更新。
它可以是另一种方便的“DRY”方案(可能不包括模板)。
决议。
感谢 karthikr 的建议。我已经创建了下一个标签(解决)。它解析变量的内容:
from django import template
from django.utils.safestring import mark_safe
from django.utils.html import escape
register = template.Library()
@register.tag( name="resolve" )
def do_resolve( parser, token ):
nodelist = parser.parse(('endresolve',))
parser.delete_first_token()
return ResolveNode( nodelist )
class ResolveNode( template.Node ):
def __init__( self, nodelist ):
self.nodelist = nodelist
def render( self, context ):
output = self.nodelist.render( context ) # applye children here
output = template.Template( output ).render( context )
return output
因此,我们可以使用标签更改我们的item.html:
<div class='item'>
<div class='header'>{{header}}</div>
<div class='text'>{% resolve %}{{text}}{% endresolve %}</div>
</div>
现在,如果我们作为带有参数的字符串传递,它会正常处理。