Кто должен форматировать мои данные для отображения?

StackOverflow https://stackoverflow.com/questions/2145247

  •  23-09-2019
  •  | 
  •  

Вопрос

У меня есть представление django, и это представление возвращает таблицу, которая заполняется асинхронно с помощью вызова ajax.

С точки зрения дизайна, какому из них мне следует следовать:

  1. представление django, вызываемое через ajax, возвращает содержимое таблицы в виде ответа json, содержащего разметку html для каждой ячейки.Обработчик обратного вызова JavaScript берет содержимое и помещает его в ячейки таблицы в нетронутом виде.
  2. представление django, вызываемое через ajax, возвращает чистые данные о том, что должно войти в таблицу, опять же в виде ответа json.Асинхронный обратный вызов javascript принимает данные, форматирует их с правильной разметкой и помещает в таблицу.

Другими словами, кто должен нести ответственность за форматирование разметки содержимого ячейки?представление или javascript?

У меня возникнет соблазн сказать первое, поскольку представление уже возвращает размеченный контент.Если он возвращает json, содержащий размеченный контент, особой разницы нет.

Я хотел бы услышать вашу точку зрения.

Нет правильного решения

Другие советы

Если вы заполняете всю таблицу, вы можете поместить ее в отдельный шаблон и вернуть HTML-код таблицы через ajax/json.

Вам нужно будет отредактировать исходный шаблон, включив в него шаблон таблицы:

 {% include "myapp/_table.html" %}

И в представлении верните визуализированный шаблон как переменную json, которую ваш javascript заменит:

 return { 'table': render_to_string("myapp/_table.html", context) }

Этот подход хорош, когда вы всегда хотите обновить всю таблицу, а для ее отображения не требуется полный контекст.Я не уверен, какова производительность, но это простой способ обновления части страницы, поскольку вы определяете свою таблицу только один раз.

Это зависит (как это часто бывает).

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

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

Эти варианты дополняют все остальные ответы, и, наконец, решать вам.

В MVP системе, такой как Django, представление решает, какие данные следует отображать, а презентатор решает, как их следует отображать.Поэтому JavaScript должен выполнять основную часть форматирования, если только это не окажется неразрешимым.

Полезно практиковать ненавязчивый JavaScript, который некоторые люди также называют Хиджакс

Итак, сначала у вас есть стандартная страница, на которой таблица представлена ​​вместе с остальной частью страницы, причем таблица находится в определенном блоке шаблона django.

Получив это, вы можете включить расширенную часть шаблона django в «если не ajax», так что вы получите только необходимую часть таблицы в ответе ajax, которую вы можете загрузить в клиенте в требуемый div.

Нет необходимости и избыточности поддерживать разметку дважды: один раз на сервере и один раз на клиенте, в javascript.

следовательно, я бы предпочел первый вариант: перерисовку сервера, а клиент загружал только обработанный HTML.

Я уже сталкивался с этим несколько раз и обычно выбираю последнее, когда представление возвращает чистый JSON.

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

Также может иметь смысл предоставлять версии вашего контента как в формате HTML, так и в формате JSON.Это особенно полезно, если вы в какой-то момент захотите создать очень легкий API для своего сайта.

Наконец, вы можете использовать такую ​​библиотеку, как John Resig. микрошаблоны или Шаблоны закрытия для упрощения генерации HTML на стороне клиента.

Я бы выбрал первый вариант, поскольку он дает пользователю больше плюсов:страница загружается мгновенно (не нужно ждать асинхронного вызова), JS не требуется (например.для мобильного устройства)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top