Лучший синтаксис для переключающих условий в шаблоне Django - PullRequest
2 голосов
/ 19 сентября 2019

Кто-нибудь знает менее громоздкий способ выполнения подобной переключению оценки в шаблоне Django, чем приведенный ниже?

<div class="alert {% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}alert-danger
                  {% elif message.level == DEFAULT_MESSAGE_LEVELS.WARNING %}alert-warning
                  {% elif message.level == DEFAULT_MESSAGE_LEVELS.SUCCESS %}alert-success
                  {% elif message.level == DEFAULT_MESSAGE_LEVELS.INFO %}alert-info
                  {% elif message.level == DEFAULT_MESSAGE_LEVELS.DEBUG %}alert-dark
                  {% else %}alert-light{% endif %} alert-dismissible fade show" role="alert">
  {{ message }}
  <button type="button" class="close" data-dismiss="alert" aria-label="Close">
    <span aria-hidden="true">&times;</span>
  </button>
</div>

1 Ответ

3 голосов
/ 19 сентября 2019

Создайте пользовательский тег шаблона и передайте level в качестве аргумента.Примерно так:

# yourapp/templatetags/message_level.py

from django import template
# import your DEFAULT_MESSAGE_LEVELS

register = template.Library()

@register.simple_tag
def get_message_css_level(level):
    '''Returns the class name for a tag based on the message level'''
    if level == DEFAULT_MESSAGE_LEVELS.ERROR:
        return 'danger'
    elif level == DEFAULT_MESSAGE_LEVELS.WARNING:
        return 'warning'
    elif level == DEFAULT_MESSAGE_LEVELS.SUCCESS:
        return 'success'
    elif level == DEFAULT_MESSAGE_LEVELS.INFO:
        return 'info'
    elif level == DEFAULT_MESSAGE_LEVELS.DEBUG:
        return 'dark'
    else:
        return 'light'

Также создайте пустой файл __init__.py внутри templatetags, это важно.Затем в свой template добавьте новый тег шаблона:

{% load message_level %}
<div class="alert alert-{% get_message_css_level message.level %} alert-dismissible fade show" role="alert">
  {{ message }}
  <button type="button" class="close" data-dismiss="alert" aria-label="Close">
    <span aria-hidden="true">&times;</span>
  </button>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...