Использование контекстной переменной для присвоения имени разделу вместо передачи значения - PullRequest
0 голосов
/ 17 января 2020

В следующем представлении переменная контекста используется для пометки «раздела» как «приборной панели» (я думаю).

@login_required
def dashboard(request):
    return render(request, 'account/dashboard.html', {'section': 'dashboard'})

Это позволяет мне сказать {% if section == 'whatever' %}, например:

{% if request.user.is_authenticated %}
      <ul class = 'menu'>
        <li {% if section == 'dashboard' %} class='selected' {% endif %}>
          <a href="{% url 'dashboard' %}">My Dashboard</a>
        </li>
        ... continues
    </ul>
   {% endif %}

Теперь, если вызывается представление dashboard, .selected будет применено к ' Ссылка на панель инструментов (измените цвет, чтобы показать, что он активен). Я понимаю, что он делает, просто не понимаю, как это работает. Я видел только значения, переданные в контексте, т.е. {'number': 8}. Как именно django отслеживает эту систему именования? Кажется, он не добавляет класс или что-то в этом роде.

1 Ответ

1 голос
/ 17 января 2020

Каждый ключ в словаре context, который передается в шаблон, преобразуется в переменную с тем же именем, которое доступно шаблону в момент рендеринга.

Например, если вы визуализируете шаблон с контекстным указанием, таким как:

{
    'key1': 'somevalue1',
    'key2': 'somevalue2',
    'key3': 'somevalue3',
}

в шаблоне, во время рендеринга у вас будет три переменные с именами key1, key2 и key3 с соответствующими значениями.

Итак, что происходит в вашем коде, так это то, что при вызове представления dashboard() это представление отображает шаблон, который ваше представление вызывает метод render(), который, в свою очередь, принимает код шаблона, определенный в передаваемом вами файле html и преобразует этот код в чистый html, выполняя шаблонный код django в контексте, где была создана переменная section и ей присвоено значение 'dashboard' (потому что это то, что вы передали render() как context param)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...