2016-01-13 214 views
-1

如何在Django模板中使用模板标签?模板标签Django

{% if proposal.status == 'c' %} 
    <td><i class="fa fa-close fa-fw status-cancelado"></i></td> 
{% elif proposal.status == 'elab' %} 
    <td><i class="fa fa-circle fa-fw status-elab"></i></td> 
{% elif proposal.status == 'p' %} 
    <td><i class="fa fa-circle fa-fw status-pendente"></i></td> 
{% elif proposal.status == 'co' %} 
    <td><i class="fa fa-check fa-fw status-concluido"></i></td> 
{% elif proposal.status == 'a' %} 
    <td><i class="fa fa-star fa-fw status-aprovado"></i></td> 
{% endif %} 

我使用下面的代码,但返回错误。

from django import template 
from django.utils.html import mark_safe 

register = template.Library() 


@register.tag 
def status_icon(status): 
    icons = { 
     'c': 'fa-close status-cancelado', 
     'elab': 'fa-circle status-elab', 
     'p': 'fa-circle status-pendente', 
     'co': 'fa-check status-concluido', 
     'a': 'fa-star status-aprovado' 
    } 
    return mark_safe('<i> class="{}"</i>'.format(icons[status])) 

但是返回错误。 .................................................. .................................................

enter image description here

+1

什么是你出的代码的问题?它工作吗?如果不是,它会产生什么样的错误? –

+0

我想使用模板标签来减少代码的重构。 –

回答

2

我最终会是这样的:

# yourapp/templatetags/yourapp_tags.py 
from django import template 
from django.utils.html import mark_safe 

register = template.Library() 

@register.simple_tag 
def status_icon(status): 
    icons = { 
     'c': 'fa fa-close fa-fw status-cancelado', 
     'elab': 'fa fa-circle fa-fw status-elab', 
     # etc 
    } 
    return mark_safe('<i class="%s"></i>' % icons[status]) 

用法示例:

{% load yourapp_tags %} 
<td>{% status_icon proposal.status %}</td> 
+0

我个人认为,在这种特定情况下,模板标签必须失败,否则会产生不正确的标记。但是你是对的,在很多情况下我们应该实现某种默认图标。 –

+0

@AlexMorozov我编辑我的问题。返回错误。 –

+0

将模板标签代码放到哪里的文件的完整路径和名称是什么? –