Django - Скрытие легенды в Highcharts из сценария Python

Мне нужна ваша помощь для небольшого проекта, который я делаю с Django и Highcharts.js.

Моя цель: скрыть легенду на графике Highcharts из моего скрипта views.py

В моем файле views.py мне удалось правильно построить различные типы графиков. Но я не могу скрыть легенду из файла views.py.

Для примера я позаимствовал код из этого руководства django-highcharts-example в Github.

Вот пример кода для воспроизведения поведения скрипта:

views.py

def ticket_class_view_3(request):
    dataset = Passenger.objects \
        .values('ticket_class') \
        .annotate(survived_count=Count('ticket_class', filter=Q(survived=True)),
                  not_survived_count=Count('ticket_class', filter=Q(survived=False))) \
        .order_by('ticket_class')

    categories = list()
    survived_series_data = list()
    not_survived_series_data = list()

    for entry in dataset:
        categories.append('%s Class' % entry['ticket_class'])
        survived_series_data.append(entry['survived_count'])
        not_survived_series_data.append(entry['not_survived_count'])

    survived_series = {
        'name': 'Survived',
        'data': survived_series_data,
        'color': 'green'
    }

    not_survived_series = {
        'name': 'Survived',
        'data': not_survived_series_data,
        'color': 'red',
        'showInLegend': "false"    }

    chart = {
        'chart': {'type': 'column'},
        'title': {'text': 'Titanic Survivors by Ticket Class'},
        'xAxis': {'categories': categories},
        'series': [survived_series, not_survived_series],
        'plotOptions': {'column': {'showInLegend': 'false'}}
    }

    dump = json.dumps(chart)

    return render(request, 'ticket_class_3.html', {'chart': dump})

html, в котором я импортирую Highcharts.js и создаю графики.

ticket_class_3.html

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Django Highcharts Example</title>
</head>
<body>
  <a href="{% url 'home' %}">Return to homepage</a>
  <div id="container"></div>
  <script src="https://code.highcharts.com/highcharts.src.js"></script>
  <script>
    Highcharts.chart('container', {{ chart|safe }});
  </script>
</body>
</html>

Я попытался скрыть легенду, как это сделано в приведенном выше примере кода в файле views.py

'plotOptions': {'column': {'showInLegend': 'false'}}

Я также попробовал это при создании серии с тем же результатом: легенда все еще появляется.

        not_survived_series = {
        'name': 'Survived',
        'data': not_survived_series_data,
        'color': 'red',
        'showInLegend': "false"}

Однако, если я добавляю эту опцию showInLegend в html-код, она работает правильно. Но я хотел бы иметь возможность сделать это из Python. Возможно ли это, не могли бы вы мне помочь?

Если вам нужен пример, более простой в исполнении, дайте мне знать, и я постараюсь его подготовить.

Я уже нашел ошибку в своем коде. Похоже, что когда вы настраиваете графики из Python и вам нужно объявить булево значение, вы должны объявить его как True/False, а не как "true" или "false".

Чтобы скрыть легенду в моем коде, я должен заменить 'plotOptions': {'column': {'showInLegend': "false"}} на 'plotOptions': {'column': {'showInLegend': False}}.

def ticket_class_view_3(request):
    dataset = Passenger.objects \
        .values('ticket_class') \
        .annotate(survived_count=Count('ticket_class', filter=Q(survived=True)),
                  not_survived_count=Count('ticket_class', filter=Q(survived=False))) \
        .order_by('ticket_class')

    categories = list()
    survived_series_data = list()
    not_survived_series_data = list()

    for entry in dataset:
        categories.append('%s Class' % entry['ticket_class'])
        survived_series_data.append(entry['survived_count'])
        not_survived_series_data.append(entry['not_survived_count'])

    survived_series = {
        'name': 'Survived',
        'data': survived_series_data,
        'color': 'green'
    }

    not_survived_series = {
        'name': 'Survived',
        'data': not_survived_series_data,
        'color': 'red' }


    chart = {
        'chart': {'type': 'column'},
        'title': {'text': 'Titanic Survivors by Ticket Class'},
        'xAxis': {'categories': categories},
        'series': [survived_series, not_survived_series],
        'plotOptions': {'column': {'showInLegend': False}}
    }

    dump = json.dumps(chart)

    return render(request, 'ticket_class_3.html', {'chart': dump})

Предлагаю закрыть эту тему.

Вернуться на верх