Шаблон Django не форматируется <pre>Тег правильно - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь отобразить необработанные данные json в шаблоне Django с тегом <pre>.

У меня это работает в нескольких местах, но по какой-то причине один из моих образцов JSON не работает правильно.

Чтобы получить json, я беру словарь python с вложенными списками и словарями. Затем я запускаю это через json.dumps(), чтобы получить мой JSON. Это выглядит так:

data = {'parent_key': {'key1': 'value1', 'key2': 'value2', 'key3': ['obj1', 'obj2', 'obj3'], 'problem_key': ['problem_data1', 'problem_data2', 'problem_data3']}

json_data = json.dumps(data, indent=4)

С моими другими словарями это работает хорошо - ожидаемый вывод - «довольно» отформатированный json - т.е.:

parent_key {
    "key1": "value1",
    "key2": "value2", 
    "key3": [
        "obj1",
        "obj2",
        "obj3",
        ], 
    "problem_key": "[\n    \"problem_data1\",\n    \"problem_data2\",\n    \"problem_data3\"\n    ]

В шаблоне Django мой код выглядит так:

<code>{% for k, v in json_data.items %}
    <pre>{{ k }} {{ v }}
{% endfor%}

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

Есть мысли?

Редактировать - Render Ниже - search_result ['display'] - обычный dic

    search_result['display'] = json.dumps(search_result['display'], indent=4)

    return render(request, 'iocs/ioc_check.html', {'search_result': search_result, 'pp_result': pp_data, 'url_haus': url_haus_,
                                                   'envcount': envcount})

Правка - Фактический вывод

www.google.com.dns-report.com {
    "Source": "CrowdStrike-Intel",
    "Malicious_Confidence": "high",
    "First_Seen": "2019-05-07 14:10:26",
    "Last_Seen": "2019-05-15 20:31:17",
    "TISAG_SEIR": "TISAG-SEIR",
    "Malware": [
        "FakeDead"
    ],
    "Threat_Type": "Error",
    "Kill_Chain": [
        "C2"
    ],
    "Tags": [
        "domain",
        [
            "C2"
        ],
        [
            "FakeDead"
        ]
    ],
    "Additional_Context": "[\n    {\n        \"indicator\": \"4e85c248eab9eedd3941640699cb1c4b\",\n        \"type\": \"hash_md5\",\n        \"created_date\": \"2019-05-07 14:10:26\",\n        \"last_valid_date\": \"2019-05-07 14:10:26\"\n    },\n    {\n        \"indicator\": \"96723797870a5531abec4e99fa84548837e9022e9f22074cf99973ab7df2a2e7\",\n        \"type\": \"hash_sha256\",\n        \"created_date\": \"2019-05-07 14:10:26\",\n        \"last_valid_date\": \"2019-05-07 14:10:26\"\n    },\n    {\n        \"indicator\": \"ff166de7d1b17a008e5bc3f3356fbf2dbe4906ec\",\n        \"type\": \"hash_sha1\",\n        \"created_date\": \"2019-05-07 14:10:26\",\n        \"last_valid_date\": \"2019-05-07 14:10:26\"\n    }\n]"
} 

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Виллем Ван Онсем понял это для меня в комментариях.Я хотел опубликовать ответ на случай, если у кого-то еще есть эта проблема.

Причина, по которой это печаталось странно, заключается в том, что одна небольшая часть моего конечного результата уже была преобразована из JSON в строку.Чтобы решить эту проблему, я просто поместил весь набор данных обратно в json.loads(), а затем снова сбросил его обратно в json.dumps(). После того, как я это сделал, все заработало правильно.

0 голосов
/ 22 мая 2019

Вывод json.dumps [Pyton-doc] представляет собой str ing:

(...)

Сериализация obj в формате JSON str с использованием этой таблицы преобразования. Аргументы имеют то же значение, что и в dump().

Если вы хотите отобразить результат, вы можете сделать это с помощью простого:

<code><pre><b>{{ json_data }}</b>

Поскольку это str ing, это означает, что у него также нет .items(), и, следовательно, {% for k, v in json_data.items %} не должно приводить ни к какой итерации вообще. Поэтому похоже, что вы передали в шаблон что-то еще, кроме вашего json_data объекта.

Исходя из вашего render(..) вызова, он должен выглядеть следующим образом:

<code><pre>{{ <b>search_result.display</b> }}

После некоторого обсуждения кажется, что часть ответа API отформатирована в JSON, поэтому в этом случае, вероятно, лучше сначала загрузить эту часть JSON, а затем создать JSON-дамп для всего словаря и отобразить его, как описано выше. .

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