Como posso colcoar duas listas num template só?

43 views
Skip to first unread message

Matheus Bon

unread,
Aug 24, 2022, 8:26:28 PM8/24/22
to Django Brasil
Olá amigos!

Gostaria de fazer algo assim na minha página. Como posso está fazendo?
Se eu continuar da forma que estou fazendo, terei de criar duas páginas...


Screenshot from 2022-08-24 17-26-15.png
Screenshot from 2022-08-24 17-27-30.png

Rudnei Nascimento

unread,
Aug 29, 2022, 4:44:38 PM8/29/22
to django...@googlegroups.com
Eu retornaria dois itens dentro do context na mesma view, um item com uma lista de produtos e um item com uma lista de despesas.

 class SuaView(TemplateViewWithConfiguration):
    template_name = 'seu template'

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        produtos = models.Produtos.objects.filter().order_by('id').reverse()
        despesas = models.Despesas.objects.filter().order_by('id').reverse()
        seo = get_seo_data('projects')
       
        context.update(
            {
                'produtos': produtos,
                'despesas' : despesas,
            }
        )
       
        return context

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/django-brasil/12499f25-f407-4b47-a2ea-fe761ebbbc4bn%40googlegroups.com.

Feliz

unread,
Aug 29, 2022, 4:44:38 PM8/29/22
to Django Brasil
Vc criar duas tabelas no template e em cada tabela vc faz um for

Marcos André Gerard alves

unread,
Aug 30, 2022, 7:48:00 AM8/30/22
to django...@googlegroups.com
Manda por contexto dois objetos 

contexto ={"alunos": alunos, "notas": notas}

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.

Matheus Bon

unread,
Sep 12, 2022, 8:30:56 AM9/12/22
to django...@googlegroups.com
Olá, Rudnei!
Bem, eu sou iniciante ainda no Django, então provavelmente estou com umas dúvidas básicas, mas creio que são elas que me farão entender o processo...

Como eu disse eu quero criar uma página, que nela existam duas listas, despesa e produto. No meu projeto, eu criei uma app chamada de 'cadastro', é nela que são feitas as edições, adições e exclusões dos itens cadastrados. Minha ideia é unir essa app com minha app de páginas, no template chamado 'gastos'.
Na view da app cadastro meu código é esse:
from multiprocessing import context
from django.views.generic import TemplateView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic.list import ListView
from .models import ListaDespesas, ListaProdutos
from django.urls import reverse_lazy




""" Views """

class ProdutoCreate(CreateView):
model = ListaProdutos
fields = ['nome_produto', 'quantidade_produto', 'custo_venda', 'fornecedor', 'data_adicao']
template_name = 'cadastro/form.html'
success_url = reverse_lazy('vendas')

class DespesaCreate(CreateView):
model = ListaDespesas
fields = ['nome_despesa', 'quantidade_despesa', 'custo', 'tipo_gasto', 'data_atualizacao']
template_name = 'cadastro/form.html'
success_url = reverse_lazy('vendas')


""" Update """

class ProdutoUpdate(UpdateView):
model = ListaProdutos
fields = ['nome_produto', 'quantidade_produto', 'custo_venda', 'fornecedor', 'data_adicao']
template_name = 'cadastro/form.html'
success_url = reverse_lazy('vendas')

class DespesaUpdate(UpdateView):
model = ListaDespesas
fields = ['nome_despesa', 'quantidade_despesa', 'custo', 'tipo_gasto', 'data_atualizacao']
template_name = 'cadastro/form.html'
success_url = reverse_lazy('vendas')


""" Delete """

class ProdutoDelete(DeleteView):
model = ListaProdutos
template_name = 'cadastro/form-excluir.html'
success_url = reverse_lazy('vendas')

class DespesaDelete(UpdateView):
model = ListaDespesas
template_name = 'cadastro/form-excluir.html'
succes_url = reverse_lazy('vendas')


""" Lista """

class lista(TemplateView):
template_name = 'paginas/gastos'
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
produtos = ListaProdutos.objects.filter().order_by('id').reverse()
despesas = ListaDespesas.objects.filter().order_by('id').reverse()
seo = get_seo_data('projects')

context.update( {'produtos': produtos, 'despesas':despesas})

Como pode ver, eu já coloquei a ideia que você me passou, porém, não sei se seria dessa forma. E como eu retomo essa lista lá no meu template?

Esse são meus códigos de urls.py (Da app cadastro):
from django.urls import path
from .views import ProdutoCreate, DespesaCreate
from .views import ProdutoUpdate, DespesaUpdate
from .views import ProdutoDelete, DespesaDelete



urlpatterns = [
path('cadastrar/produto', ProdutoCreate.as_view(), name='cadastrar-produto'),
path('cadastrar/despesas', DespesaCreate.as_view(), name='cadastrar-despesa'),

path('editar/produto/<int:pk>/', ProdutoUpdate.as_view(),name='editar-produto'),
path('editar/despesa/<int:pk>', DespesaUpdate.as_view(),name='editar-despesa'),

path('excluir/produto/<int:pk>/', ProdutoDelete.as_view(),name='excluir-produto'),
path('excluir/despesa/<int:pk>', DespesaDelete.as_view(),name='excluir-despesa'),



]

Esse aqui é meu código da view que quando eu clicar em editar algum item da lista, ele manda para essa página de edição:
{% extends 'paginas/modelo.html' %}
{% load static %}

{% block titulo %}
<title>Cadastrar Produtos/Despesas</title>
{% endblock %}

{% block conteudo %}

<div class="home_content">
<div class="conteudo_pagina">
<h3>Faça seu cadastro aqui</h3>

{% csrf_token %}

{{form.as_p}}

<button type="submit" class="btn btn-primary">Salvar Item</button>

</div>
</div>



Essa também é de edição:

{% endblock %}


{% extends 'paginas/modelo.html' %}
{% load static %}

{% block titulo %}
<title>Excluir Produtos/Despesas</title>
{% endblock %}

{% block conteudo %}

<div class="home_content">
<div class="conteudo_pagina">
<h3>Excluir cadastro</h3>

Deseja excluir o registro: {{ object }}?

{% csrf_token %}

{{form.as_p}}

<button type="submit" class="btn btn-danger">Excluir</button>

</div>
</div>




{% endblock %}


 

Por fim, é aqui que eu quero colocar a lista de despesa e produto, na minha app de páginas, no template gasto:
{% extends 'paginas/modelo.html' %}
{% load static %}

{% block titulo %}
<title>PDV|Gastos</title>
{% endblock %}

{% block conteudo %}

<div class="home_content">
<div class="conteudo_pagina">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Itaque consequuntur, saepe laudantium fuga animi, enim labore cumque aperiam rem a voluptatum tempore provident maxime ex distinctio veritatis nam expedita fugiat.
</div>
</div>




{% endblock %}


 

Muito obrigado pela ajuda!

Você recebeu essa mensagem porque está inscrito em um tema no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse tema, acesse https://groups.google.com/d/topic/django-brasil/RJKROrKAh_c/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus temas, envie um e-mail para django-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/django-brasil/CAM2X%3DmZk-ZjH5tktTbpy2nzEsvuf-5wc1cCd9FNO3VxpvmjcFw%40mail.gmail.com.

Danilo Ribeiro

unread,
Sep 12, 2022, 8:33:02 AM9/12/22
to Django Brasil
Manda no dict do context. Você pode mandar o que quiser ali e trabalhar como quiser no template language

Rudnei Nascimento

unread,
Sep 12, 2022, 9:15:39 AM9/12/22
to django...@googlegroups.com
Bom dia,
 Primeiramente, pode excluir esse trecho aqui "seo = get_seo_data('projects')" enviei sem querer, não tem nada a ver com o seu problema! 😅
Agora, na class lista() você já tem os itens que você precisa, produtos e despesas context.update( {'produtos': produtos, 'despesas':despesas}) 

Basta agora na página de gastos percorrer essas duas listas com um for, mais ou menos assim. É claro que o nome das colunas do banco de dados dentro do "for" eu chutei, ai você ajusta ai...


{% extends 'paginas/modelo.html' %}
{% load static %}

{% block titulo %}
<title>PDV|Gastos</title>
{% endblock %}

{% block conteudo %}

<div class="home_content">
    <div class="conteudo_pagina">
       
        <h1>Lista de Produtor</h1>
        <table>
            <thead>
                <th>
                    <td>Código</td>
                    <td>Produto</td>
                    <td>Qtde.</td>
                    <td>Custo/Venda</td>
                    <td>Fornecedor</td>
                    <td>Data de Adição</td>
                </th>
            </thead>
            <tbody>
                {% for produto in produtos %}
                    <tr>
                        <td>{% produto.codigo %}</td>
                        <td>{% produto.nome  %}</td>
                        <td>{% produto.qantidade  %}</td>
                        <td>{% produto.custo  %}</td>
                        <td>{% produto.fornecedor  %}</td>
                        <td>{% produto.data_adicao  %}</td>
                    </tr>
                {% endfor %}
            </tbody>
        </table>

<!--  ----------------------------------------------------------------------   -->

        <h1>Outras Despesas</h1>
        <table>
            <thead>
                <th>
                    <td>Despesa</td>
                    <td>Quantidade</td>
                    <td>Custo</td>
                    <td>Tipo de gasto</td>
                    <td>Data Atualização</td>
                </th>
            </thead>
            <tbody>
                {% for despesa in despesas %}
                    <tr>
                        <td>{% despesa.nome  %}</td>
                        <td>{% despesa.qantidade  %}</td>
                        <td>{% despesa.custo  %}</td>
                        <td>{% despesa.tipo  %}</td>
                        <td>{% despesa.data_atualizacao  %}</td>
                    </tr>
                {% endfor %}
            </tbody>
        </table>


    </div>
</div>

{% endblock %}

Rudnei Nascimento

unread,
Sep 12, 2022, 12:44:51 PM9/12/22
to django...@googlegroups.com
Enviando o código novamente corrigindo um erro ai no jinja. E só lembrando que você tem que criar uma rota em urls.py para a class lista()

{% extends 'paginas/modelo.html' %}
{% load static %}

{% block titulo %}
<title>PDV|Gastos</title>
{% endblock %}

{% block conteudo %}

<div class="home_content">
    <div class="conteudo_pagina">
       
        <h1>Lista de Produtor</h1>
        <table>
            <thead>
                <th>
                    <td>Código</td>
                    <td>Produto</td>
                    <td>Qtde.</td>
                    <td>Custo/Venda</td>
                    <td>Fornecedor</td>
                    <td>Data de Adição</td>
                </th>
            </thead>
            <tbody>
                {% for produto in produtos %}
                    <tr>
                        <td>{{ produto.codigo }}</td>
                        <td>{{ produto.nome  }}</td>
                        <td>{{ produto.qantidade  }}</td>
                        <td>{{ produto.custo  }}</td>
                        <td>{{ produto.fornecedor  }}</td>
                        <td>{{ produto.data_adicao  }}</td>
                    </tr>
                {% endfor %}
            </tbody>
        </table>

<!--  ----------------------------------------------------------------------   -->

        <h1>Outras Despesas</h1>
        <table>
            <thead>
                <th>
                    <td>Despesa</td>
                    <td>Quantidade</td>
                    <td>Custo</td>
                    <td>Tipo de gasto</td>
                    <td>Data Atualização</td>
                </th>
            </thead>
            <tbody>
                {% for despesa in despesas %}
                    <tr>
                        <td>{{ despesa.nome  }}</td>
                        <td>{{ despesa.qantidade  }}</td>
                        <td>{{ despesa.custo  }}</td>
                        <td>{{ despesa.tipo  }}</td>
                        <td>{{ despesa.data_atualizacao  }}</td>
                    </tr>
                {% endfor %}
            </tbody>
        </table>


    </div>
</div>




{% endblock %}

Matheus Bon

unread,
Sep 12, 2022, 4:47:23 PM9/12/22
to django...@googlegroups.com
Ficou claro, Rudnei. Muito obrigado, pelo seu tempo!

Reply all
Reply to author
Forward
0 new messages