Пользовательский тег Django 'take_context' - PullRequest
0 голосов
/ 08 марта 2011

Я новичок в django (из Grails), особенно со всеми теми пользовательскими тегами, с которыми вам приходится иметь дело, вместо того, чтобы записывать свои переменные непосредственно в шаблоны.

Ну, что мне нужноdo было чем-то действительно простым, но по какой-то причине мне потребовалось много времени, чтобы закончить.Я хотел сделать тег, который проверяет, равен ли данный путь моему текущему URL, а затем возвращает класс, если true.

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

Но проблема возникла, когда я попытался зарегистрироватьсятег с take_context:

Печатная ошибка типа при рендеринге: simple_tag () получил неожиданный аргумент ключевого слова 'take_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 ]

1 голос
/ 14 февраля 2012

Это потому, что takes_context доступно только с django 1.3 .

1 голос
/ 09 марта 2011

Другой способ сделать это (и избежать жестко закодированных URL):

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

Или проверить что-то вроде это !

...