2016-01-13 213 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

將模板標籤代碼放到哪裏的文件的完整路徑和名稱是什麼? –