1

我是 django 的新手(来自 Grails),尤其是您必须处理的所有自定义标签,而不是直接在模板中编写变量。

好吧,我需要做的是非常简单的事情,但由于某种原因,我需要很长时间才能完成。我想做的是制作一个标签,检查给定路径是否等于我当前的 url,如果为真则返回类。

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

但是,当我尝试使用 take_context 注册标签时,问题就来了:

渲染时捕获 TypeError: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 ''

我该如何解决?另外,有没有更好的方法呢?

4

2 回答 2

2

那是因为takes_context仅从django 1.3开始可用。

于 2012-02-14T09:43:54.730 回答
1

另一种方法来做到这一点(并避免硬编码的网址):

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

或者看看这样的东西

于 2011-03-08T22:13:03.427 回答