2011-03-08 251 views
0

我用django(來自Grails)推出了新特性,特別是您必須處理的所有自定義標籤,而不是直接在模板中編寫變量。Django自定義標籤'takes_context'

嗯,我需要做的事情非常簡單,但由於某種原因,我花了很長時間才完成。我想要做的是製作一個標籤,檢查給定的路徑是否等於我的當前網址,然後返回該類如果爲true。

<li class="{% check_url '/login/' 'current_page_item' %}"> 
    <a href="{% url social_login %}">login</a> 
</li> 

但是,問題來了,當我試圖用takes_context註冊標籤:

陷入類型錯誤而渲染:simple_tag()得到了一個意想不到的關鍵字參數 'takes_context'

from django import template 

register = template.Library() 

@register.simple_tag(takes_context=True) 
def check_url(context, path, attr): 
     if context['request'].environ.get('PATH_INFO') == path: 
      return attr 
     else: 
      return '' 

我該如何解決它?另外,有沒有更好的方法來做到這一點?

+2

你使用hte最新的開發版本的django(1.3.x?)或穩定的1.2.x?如果是這樣,您不能以這種方式使用simple_tag - http://docs.djangoproject.com/en/dev/howto/custom-template-tags/。一個簡單的快速方法可能是做一些像{%ifequal request.get_full_path'/ login /'%} class =「current_page」{%endif%}。 – user608133 2011-03-08 20:44:32

+1

我使用的是django 1.2.5,我之前嘗試過使用快捷方式,但我將其移動到自定義標籤以獲得清晰視圖。這個takes_context只適用於inclusion_tag(不是我想要的) – mateusmaso 2011-03-08 20:50:42

回答

1

另一種方法來做到這一點(和避免硬編碼的網址):

{% url social_login as the_url %} 
{% ifequal the_url request.path %} 
.... 
{% endif %} 

或檢查出像this東西!

1

這是因爲takes_context僅可用於django 1.3