Pergunta

Quando eu escrever o meu JS para um projeto Django, claro, eu faço algumas chamadas AJAX, e por um momento as urls para as chamadas são hard-coded (o que é muito feio).

Eu estava pensando em ter o JS servido por django (em vez de Apache), para que eu pudesse tirar vantagem do modelo tags ({% url %} !!!).

Há uma razão pela qual eu não deveria fazer isso ?

Ou existe uma maneira correta de fazer isso ?

(Eu posso dar, pelo menos, um :ele irá consumir muito tempo reenviar JS arquivos que não foram alterados.O que seria ótimo é ter um aplicativo que gera arquivos quando reiniciar o django servidor, e serve-los estaticamente depois !)

Foi útil?

Solução 2

Eu procurei mais fundo nesses aplicativos de gerente de ativos de Djangopackages, descobri que Django-mediagenerator Fornece esse recurso, mesmo que não esteja bem documentado: você pode gerar seus arquivos JS ou CSS como modelos de Django e depois servi -los estaticamente (eles também são empacotados, e o cache é gerenciado etc ... Então, dois pássaros com uma pedra + É realmente fácil de configurar!).

Para ter arquivos JS gerados como modelos de django (depois de configurar django-mediagenerator), basta adicionar o filtro:

ROOT_MEDIA_FILTERS = {
    'js': 'mediagenerator.filters.template.Template',
}

em suas configurações.

Outras dicas

Gostaria de ir para uma técnica híbrida.Servir mais de seu javascript estaticamente.Mas no seu Django modelo, tem um <script> bloco que define diversas variáveis globais, que são gerados pelo código do lado do servidor - url é um bom exemplo.Em seguida, o estático JS pode referir-se às variáveis que são geradas na dinâmica de código.

A geração dinamicamente JavaScript no seu servidor pode ser uma ferramenta tremendamente poderosa e eu experimentei o lado positivo e o lado negativo dos meus projetos.

Em geral, você deseja manter o máximo possível estático para minimizar o trabalho a ser feito em todas as solicitações. Isso inclui ter o cache do navegador o máximo possível, o que pode se tornar um problema no seu caso.

O que eu costumo fazer é ter um bloco no cabeçalho no meu modelo base. Em modelos que precisam fazer o JavaScript personalizado que é conhecido apenas no tempo de execução (personalização com base no usuário logado, por exemplo), eu o adiciono ao bloco. Aqui, posso gerar dinamicamente JavaScript que sei que não será armazenado em cache para que eu possa fazer algumas suposições. A desvantagem é mais complexidade.

Se o que você precisa estiver apenas apontando para os URLs, ou ter uma configuração simples, etc., sugiro criar uma visualização que retorne um arquivo JavaScript com essas configurações. Você pode definir os cabeçalhos corretos (ETAG, controle de cache, etc.) para que o navegador cache o arquivo por algum tempo razoável. Ao atualizar seu código, verifique se o ETAG mudará.

No código que precisa usar a configuração, você precisa sempre verificar se a variável que você está procurando é realmente definida, caso contrário você vai Ter problemas difíceis de depurar quando, por algum motivo, o JavaScript de configuração não é carregado corretamente.

Os .js que são enviados para o navegador variariam. Isso poderia tornar a depuração mais pesada. Talvez não seja um problema, mas algo para potencialmente considerar ...

Atualmente, a melhor maneira de fazer isso é usar o django.js

Aqui está o documento onde eles falam sobre o URL revertendo: http://djangojs.readthedocs.org/en/0.8.1/djangojs.html#reverse-urls

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