我用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 ''
我该如何解决它?另外,有没有更好的方法来做到这一点?
你使用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
我使用的是django 1.2.5,我之前尝试过使用快捷方式,但我将其移动到自定义标签以获得清晰视图。这个takes_context只适用于inclusion_tag(不是我想要的) – mateusmaso 2011-03-08 20:50:42