Django / Javascript: Как передать переменную фильтру шаблона в функции javascript? - PullRequest
0 голосов
/ 08 мая 2020

В настоящее время я передаю переменную шаблона в views.py:

def home_view(request, *args, **kwargs):
    if scrape.get_countries().count() == 0 or (timezone.now()-scrape.get_global().last_updated).total_seconds()/3600 > 24:
        scrape.fetch_api_data()
        scrape.fetch_time_data2()

    return render(request, 'home.html', {'all_dates': scrape.get_dates()})

, где all_dates - это словарь.

В функции javascript в моем home.html я хочу чтобы иметь возможность получить доступ к значениям из словаря с помощью ключевой переменной с именем code .

<script>
 function create_graph(country, code, dates) {
    var date = "{{ all_dates|get_item:code|get_item:'05/05/2020'|get_item:'confirmed'}}";
    window.alert(date);
</script>

FYI, get_item - это просто простой шаблонный фильтр в другом файле

@register.filter
def get_item(dictionary, key):
    if key:
        return dictionary.get(key)

Однако при запуске сервера я получаю следующее сообщение об ошибке:

VariableDoesNotExist at /
Failed lookup for key [code] in [{'True': True, 'False': False, 'None': None}, {}, {}, {'global': <Country: Global>, 'countries': <QuerySet [<Country: Global>, <Country: ALA Aland Islands>, <Country: Afghanistan>, <Country: Albania>, <Country: Algeria>, <Country: American Samoa>, <Country: Andorra>, <Country: Angola>, <Country: Anguilla>, <Country: Antarctica>, <Country: Antigua and Barbuda>, <Country: Argentina>, <Country: Armenia>, <Country: Aruba>, <Country: Australia>, <Country: Austria>, <Country: Azerbaijan>, <Country: Bahamas>, <Country: Bahrain>, <Country: Bangladesh>, '...(remaining elements truncated)...']>, 'all_dates': {'..': {}, 'AX': {}, 'AF': {'05/04/2020': {'confirmed': 2894, 'recovered': 397, 'deaths': 90}, '05/03/2020': {'confirmed': 2704, 'recovered': 345, 'deaths': 85}, '05/02/2020': {'confirmed': 2469, 'recovered': 331, 'deaths': 72}, '05/01/2020': {'confirmed': 2335, 'recovered': 310, 'deaths': 68}, '04/09/2020': {'confirmed': 484, 'recovered': 32, 'deaths': 15}, '04/08/2020': {'confirmed': 444, 'recovered': 29, 'deaths': 14}, '04/07/2020': {'confirmed': 423, 'recovered': 18, 'deaths': 14}, '04/06/2020': {'confirmed': 367, 'recovered': 18, 'deaths': 11}, '04/05/2020': {'confirmed': 349, 'recovered': 15, 'deaths': 7}, '04/04/2020': {'confirmed': 299, 'recovered': 10, 'deaths': 7}, '04/30/2020': {'confirmed': 2171, 'recovered': 260, 'deaths': 64}, '04/03/2020': {'confirmed': 281, 'recovered': 10, 'deaths': 6}, '04/29/2020': {'confirmed': 1939, 'recovered': 252, 'deaths': 60}, '04/28/2020': {'confirmed': 1828, 'recovered': 228, 'deaths': 58}, '04/27/2020': {'confirmed': 1703, 'recovered': 220, 'deaths': 57}, '04/26/2020': {'confirmed': 1531, 'recovered': 207, 'deaths': 50}, '04/25/2020': {'confirmed': 1463, 'recovered': 188, 'deaths': 47}, '04/24/2020': {'confirmed': 1351, 'recovered': 188, 'deaths': 43}, '04/23/2020': {'confirmed': 1279, 'recovered': 179, 'deaths': 42}, '04/22/2020': {'confirmed': 1176, 'recovered': 166, 'deaths': 40}, '04/21/2020': {'confirmed': 1092, 'recovered': 150, 'deaths': 36}, '04/20/2020': {'confirmed': 1026, 'recovered': 135, 'deaths': 36}, '04/02/2020': {'confirmed': 273, 'recovered': 10, 'deaths': 6}, '04/19/2020': {'confirmed': 996, 'recovered': 131, 'deaths': 33}, '04/18/2020': {'confirmed': 933, 'recovered': 112, 'deaths': 30}, '04/17/2020': {'confirmed': 906, 'recovered': 99, 'deaths': 30}, '04/16/2020': {'confirmed': 840, 'recovered': 54, 'deaths': 30}, '04/15/2020': 

Как мне передать переменную javascript в фильтр шаблона django? Я попытался заключить код в двойные скобки, но это тоже не сработало.

1 Ответ

0 голосов
/ 08 мая 2020

Да, это потому, что вы передаете переменную кода в двойных кавычках "", а JS примет это как код вместо своего значения.

Чтобы решить эту проблему, попробуйте +'code'+ в вашей JS функции линия и дайте мне знать, сработало ли это

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