Combinando vários modelos de django em uma única solicitação
-
03-07-2019 - |
Pergunta
Gostaria de saber se alguém pode me ajudar a descobrir a melhor abordagem para o seguinte problema. Estou construindo um aplicativo da Web que usa o Django Modelating para construir seu componente da interface do usuário da web. Existem vários elementos HTML comuns, como cabeçalho / rodapé, cabeça de HTML, cabeçote de masthe, etc. Gostaria de codificá -los uma vez e "incluir / combiná -los" com outros modelos representando a funcionalidade principal do aplicativo.
Isso é possível usando modelos de django? Se sim, como posso conseguir isso?
Solução
Você pode usar o Django's extends
marcação. Diga que você tinha um cabeçalho e rodapé. Você pode fazer um modelo, chamado, digamos, foo.django:
<h1>My HTML Header</h1>
<!-- an so on -->
{% block content %}
{% endblock %}
<!-- html footer -->
Então, você pode fazer outro modelo, digamos, bar.django:
{% extends "foo.django" %}
{% block content %}
This overrides the content block in foo.django.
{% endblock %}
... que então renderá:
<h1>My HTML Header</h1>
<!-- an so on -->
This overrides the content block in foo.django.
<!-- html footer -->
Há boas instruções sobre modelos de django em http://www.djangobook.com/en/1.0/chapter04/.
Outras dicas
o {% extends %}
e {% include %}
Os métodos são bons para elementos de página que não precisam de informações extras no contexto.
Assim que você precisar inserir mais coisas no contexto do banco de dados, as tags de modelo são úteis. Como exemplo, o contrib.comments
aplicativo incluído com django define um {% get_comment_list %}
Tag de modelo para recuperar comentários anexados a uma determinada instância do modelo. Veja como você usaria:
<div>
{% load comments %}
{% get_comment_list for my_instance as comment_list %}
{% for comment in comment_list %}
<p><a href="{{ comment.url }}">{{ comment.name }}</a> wrote:</p>
{{ comment.comment }}
{% endfor %}
</div>
Você pode salvar isso em um modelo separado e {% include %}
em outros modelos.
Para seu próprio conteúdo, você pode escrever suas próprias tags de modelo personalizado. Seguir a documentação. Sempre que possível, é conveniente escrever tags usando o tag simples mecanismo. Você encontrará tags de modelo prontos djangosnippets.org e a blogosfera.
Tente o {% include %}
marcação.
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#include