Pergunta

Eu tenho alguns links em uma página HTML como, atualmente eu tratá-los como tão

<p> <a href="/cases/{{case.id}}/case_rate/-">rate down</a>

e tem uma entrada url.py:

 (r'^cases/(?P<case_id>\d+)/case_rate/(?P<oper>.)$', 'mysite.cases.views.case_rate'),

então eu tenho uma função de visualização que lida com a lógica e atinge o DB, em seguida, faz isso:

return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))

I está lá uma maneira melhor de fazer isso? Eu posso ver como isso seria OK porque tem de redesenhar a tela para mostrar a nova classificação ...

Foi útil?

Solução

A forma habitual de lidar com isso é com um pedido de AJAX.

Em vez de um link, você colocar um manipulador de javascript que chama um ponto de vista, wich atualiza o db, e retorna um json / xml objeto com a nova classificação para o item. Em seguida, outro identificador javascript recebe essa resposta e atualiza o número de classificação na tela, sem recarregar a página.

O ideal é que você vai manter ambas as versões: html simples (o que você tem atualmente) eo ajax. A única ajax pode ser anexar ao elemento após o carregamento da página, por isso, se javascript não estiver disponível, você ainda vai ter um local de trabalho.

Em seguida, sobre a organização, você pode ter um parâmetro "ajax" na sua visão. A visão deve atualizar o db em conformidade, e se é uma chamada de ajax, retornar a resposta json / xml, caso contrário, volte a nova página. Dessa forma, você pode manter a lógica (buscar o objeto, atualizar o db) em um só lugar.

Outras dicas

Se você está perguntando se case_rate ainda deve ir na views.py dado que ele retorna um redirecionamento em vez de fornecer conteúdo, a resposta é sim, desde case_rate está a lidar com um pedido e retornar uma resposta.

Mas considere uma situação onde você tinha duas funções vista em views.py que tiveram algum código duplicado, e você escolheu fator que código duplicado em outra função que não fez tanto pedido take e retornar uma resposta. Oxalá jogo justo seja para deixar em views.py? Claro, se movendo em outro lugar faria o código mais difícil de ler. Ou você pode optar por colocá-lo em outro lugar. É realmente a sua chamada com base no seu sentido do paladar.

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