Сохранение СУХОГО с помощью пользовательских тегов Django - PullRequest
0 голосов
/ 16 апреля 2011

У меня есть существующий тег шаблона, show_next_event:

def show_next_event():
    try:
        e = Event.objects.filter(published='1').order_by('date').filter(date__gte=datetime.date.today())[0]
    except IndexError:
        e = ''
    return {'event': e}
register.inclusion_tag('events/next_event.html')(show_next_event)

Я хочу абстрагировать шаблон.Первое, что приходит на ум, это изменить show_next_event на next_event, а затем добавить две новые функции;show_next_event и show_next_event_badge.Я надеюсь, что смогу сделать что-то вроде следующего, но оно не будет работать как есть:

def next_event():
    try:
        e = Event.objects.filter(published='1').order_by('date').filter(date__gte=datetime.date.today())[0]
    except IndexError:
        e = ''
    return {'event': e}

def show_next_event():
    next_event
register.inclusion_tag('events/next_event.html')(show_next_event)


def show_next_event_badge():
    next_event
register.inclusion_tag('events/next_event_badge.html')(show_next_event_badge)

Или есть еще лучшее решение?

Ответы [ 2 ]

4 голосов
/ 16 апреля 2011

Джанго - это Python, а не Ruby.Вы не можете вызвать функцию, просто указав ее имя: вам нужно использовать вызывающие скобки.И Python не возвращает автоматически значение последнего выражения в функции: вам нужно использовать оператор return.

Итак, это должно работать:

@register.inclusion_tag('events/next_event_badge.html')
def show_next_event_badge():
    return next_event()

Также,обратите внимание, что я использовал синтаксис декоратора для регистрации тега.

1 голос
/ 16 апреля 2011

После выполнения предложений @Daniel вы можете сделать это, чтобы избежать def s (DRY!):

show_next_event = next_event
show_next_event_badge = next_event

EDIT:

Было бы так:

def next_event():
    try:
        e = Event.objects.filter(published='1').order_by('date').filter(date__gte=datetime.date.today())[0]
    except IndexError:
        e = ''
    return {'event': e}

show_next_event = next_event
show_next_event_badge = next_event

register.inclusion_tag('events/next_event.html')(show_next_event)
register.inclusion_tag('events/next_event_badge.html')(show_next_event_badge)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...