como combinar um modelo de outros modelos processados?

votos
4

Eu tenho um Pro1 projeto Django com várias aplicações: app1, app2, app3 e assim por diante. Eu quero mostrar alguns modelo de nível superior que contém blocos de cada app:

example_base_template.html:

[header /]
[left nav bar]` app1 rendered template `[/left nav bar]
[right nav bar]` app2 rendered template `[/right nav bar]
[center section]` app1 main functionality template `[/center section]
[footer]` app3 rendered template `` app4 rendered template `[/footer]

Todos esses modelos de aplicativos são dinâmicos, que usam DB. Como fazer isso da forma mais adequada e elegante? Ou talvez a pergunta é como conectar 4 visualizações diferentes para um URL?

Publicado 12/11/2008 em 09:21
fonte usuário
Em outras línguas...                            


4 respostas

votos
2

Você pode usar uma {% include%} tag. Mas isso não ajudá-lo muito. A melhor solução é escrever costume tag inclusão com modelo necessário e funcionalidade.

Você não pode (de forma simples) misturar vários pontos de vista em um. Tente marcas sua solução bastante Django.

Respondeu 12/11/2008 em 19:32
fonte usuário

votos
1

Eu fiz isso por escrito tags personalizadas de modelo para cada aplicação que eu queria incluir. No começo minhas marcas de modelo apenas passado de volta html codificado. Mais tarde eu descobri que as marcas poderiam carregar seus próprios fragmentos de modelo. Houve também um trecho em algum lugar que era um genérico mais recente tag de conteúdo que funcionou muito bem.

Respondeu 12/11/2008 em 19:50
fonte usuário

votos
0

Muitos aplicativos reutilizáveis (esp. Aqueles que foram selecionados para a Pinax projeto) servem como grandes exemplos de como usar tags personalizadas de modelo para inserir conteúdo. James Bennett conversa em DjangoCon 2008 também pode ajudar.

Respondeu 02/01/2009 em 13:59
fonte usuário

votos
0

Tivemos um problema semelhante a este ea chave está recebendo os dados corretos para o contexto. O que fizemos foi de desagregação dos dados de criação / Contexto de enchimento para cada vista em uma rotina build-a ao contexto separado. Os pontos de vista originais apenas chamar a respectiva rotina e, em seguida, tornar o seu modelo. A vista compósito chama cada um dos contexto-builders e, em seguida, torna o modelo mestre, que, em seguida, inclui os sub-modelos.

Este é o lugar onde nós funcionamos em um pouco de um problema com o sistema de templates do Django. Fomos cache fragmentos de modelo e alguns desses fragmentos levou dados que era muito caro para gerar. Se o fragmento não foi envelhecer, nós definitivamente não queria fazer o trabalho. Mas atrasar o trabalho até que sabíamos que precisávamos significava que estavam agora no modelo e:

  • Você não pode passar parâmetros para métodos de dentro de um modelo.
  • O django.template .__ o init __. Variable._resolve_lookup () método foi quebrado em que se aprovou uma exigível, não chamaria isso! Se você faz referência a um método de um objeto no contexto, que funciona muito bem.

A razão para a necessidade chamáveis ao trabalho é que ele permite que você passe em uma função curry - ou seja, uma função que já tem alguns (ou todos) dos seus parâmetros especificados, mas que ainda não foi chamado. Então a visão (ou a construção de contexto, no caso) deve ser capaz de caril uma função full-especificado (lembre-se, você não pode passar parâmetros nos próprios templates) para que o modelo quando ela precisava podia invocar o que pode ser chamado, obter os dados, e vamos embora.

Nós levou duas abordagens separadas para isso:

  • Utilizou-se o tag expr a partir djangosnippets.org
  • Nós cortado o código do modelo Django para fazer chamáveis ​​trabalho (eu usei um patch enviado, mas ainda não tratado).

Desde que fizemos este site eu aprendi que poderia ter sido capaz de resolvê-lo usando geradores como produtores de dados atrasados. Os geradores de agir como uma espécie de função de curry (em que você pode passar parâmetros arbitrários para a configuração), mas o modelo de motor vê como apenas mais um iterador. Há um ótimo tutorial sobre este assunto. Nota: os geradores não são matrizes e você só pode consumi-los uma vez, de modo algum da sua lógica pode precisar de ser ajustado.

Da próxima vez eu acho que nós vamos com modelos Jinja2 e parar enroscando com modelos do Django.

Respondeu 12/11/2008 em 19:40
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more