Pergunta

Eu tenho uma visualização Django e essa visualização retorna uma tabela que é preenchida de forma assíncrona com uma chamada ajax.

Do ponto de vista do design, qual devo seguir:

  1. a view Django, chamada via ajax, retorna o conteúdo da tabela como uma resposta json, contendo marcações html para cada célula.O manipulador de retorno de chamada javascript pega o conteúdo e o coloca intacto nas células da tabela.
  2. a view Django, chamada via ajax, retorna dados puros sobre o que deve entrar na tabela, novamente como uma resposta json.O retorno de chamada javascript assíncrono pega os dados, formata-os com a marcação adequada e os coloca na tabela.

Em outras palavras, quem deve ser responsável pela formatação da marcação do conteúdo da célula?a visão ou o javascript?

Eu ficaria tentado a dizer a primeira, já que a view já retorna conteúdo marcado.Se retornar um json contendo conteúdo marcado, não há muita diferença.

Eu gostaria de ouvir seu ponto de vista.

Nenhuma solução correta

Outras dicas

Se você estiver preenchendo a tabela inteira, pode colocar sua mesa em seu próprio modelo e devolver o HTML da tabela via Ajax/JSON.

Você precisará editar o modelo original para incluir o modelo de tabela:

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

E, na opinião, retorne o modelo renderizado como uma variável JSON, que seu JavaScript substituirá:

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

Essa abordagem é boa, onde você sempre deseja atualizar a tabela inteira e a renderização da tabela não requer o contexto completo. Não tenho certeza de como é o desempenho, mas é uma maneira limpa de atualizar parte da página, porque você só define sua tabela uma vez.

Depende (como tantas vezes).

Se os dados forem solicitados apenas aqui e agora, seria mais fácil e menos propenso a erros apenas deixá-los renderizar no lado do servidor com o mesmo conjunto de modelos que já renderizavam a visualização padrão.

Se você pudesse pensar nos casos de uso, no entanto, onde os dados seriam necessários em outros lugares (como campos de preenchimento automático), seria melhor deixar o JavaScript fazer o trabalho e criar uma exportação JSON limpa e reutilizável.

Essas opções adicionam a todas as outras respostas e, finalmente, cabe a você decidir.

Em um MVP Em sistemas como o Django, o View decide quais dados devem ser mostrados e o Presenter decide como eles devem ser mostrados.Portanto, o JavaScript deve fazer a maior parte da formatação, a menos que seja extremamente difícil fazê-lo.

É bom praticar JavaScript inacreditado, também chamado por algumas pessoas como Hijax

Portanto, você primeiro tem uma página padrão, que apresenta a tabela junto com o restante da página, com a tabela em um bloco específico de Django-Template.

Depois de ter isso, você pode incluir a parte estendida do modelo Django dentro de um "se não Ajax", para que você obtenha apenas a peça de tabela necessária na resposta AJAX que pode carregar no cliente na div.

Não é necessária e redundante manter a marcação duas vezes uma vez no servidor e uma vez no cliente, no JavaScript.

Portanto, eu preferiria a primeira opção, o redução do servidor e o cliente carregando apenas o HTML renderizado.

Eu já me deparei com isso várias vezes antes, e geralmente opto pelo último, onde a vista retorna JSON puro.

No entanto, a abordagem que você escolhe definitivamente deve depender de vários fatores, um dos quais são os dispositivos direcionados (e suas restrições de CPU/rede). O Pure JSON geralmente resulta em cargas úteis menores e, portanto, pode ser ideal para dispositivos móveis.

Também pode fazer sentido expor as versões HTML e JSON do seu conteúdo. Isso é especialmente útil se você deseja criar uma API muito leve em algum momento para o seu site.

Finalmente, você pode usar uma biblioteca como John Resig's micro-templating ou Modelos de fechamento Para simplificar a geração HTML do lado do cliente.

Eu escolheria a primeira escolha, pois apresenta mais vantagens para o usuário:a página carrega instantaneamente (sem espera por chamada assíncrona), sem necessidade de JS (por exemplo,para dispositivo móvel)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top