Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tognere

DJANGO: exibir posts de outros links do menu em ordem do mais recente&

Recommended Posts

boa tarde....sou iniciante em django e estou com uma dúvida...espero que VCs possam me ajudar....desde já agradeço!!!

estou desenvolvendo um blog pessoal e criei um menu com 4 itens de postagem...INDEX...SOBRE...ARTIGOS...PROJETOS...(a postagem esta funcionando)
no item sobre...é uma postagem que vou falar sobre mim...
no artigo são postagens sobre determinados assuntos....
em projetos sao postagens sobre alguns trabalho com desenvolvimentos meu...
e meu problema é no index...eu gostaria que no index chamassem as postagens do menu ARTIGOS e PROJETOS....só que eu naum queria que fosse mostrado separadamente....eu gostaria que fosse mostrado em ordem do mais recente entre os dois juntos....
meu models ta assim:
from django.db import models


class Sobre(models.Model):

titulo = models.CharField(max_length=100)

imagem = models.ImageField(upload_to = "blog/uploads/sobre")

conteudo = models.TextField()

def __unicode__(self):

return "%s" % (self.titulo)



class Artigo(models.Model):

titulo = models.CharField(max_length=100)

imagem = models.ImageField(upload_to = "blog/uploads/artigos")

conteudo = models.TextField()

data = models.DateField() 


def __unicode__(self):

return "%s - %s - %s" % (self.titulo,self.conteudo,self.data)



class Projeto(models.Model):

titulo = models.CharField(max_length=100)

imagem = models.ImageField(upload_to = "blog/uploads/projetos")

conteudo = models.TextField()

data = models.DateField()

def __unicode__(self):

return "%s" % (self.titulo)
minhas urls ta assim:
from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'marciotognere.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^$','blog.views.index'), #index

    url(r'^sobre/$','blog.views.sobre'), #chama sobre

    url(r'^artigos/$','blog.views.artigos'), #chama artigos

    url(r'^projetos/$','blog.views.projetos'), #chama projetos
    
    url(r'^admin/', include(admin.site.urls)), #chama painel de controle
)

minha views ta assim:
# -*- coding:utf8 -*-

from django.shortcuts import render

from django.http import HttpResponse

from blog.models import Sobre, Artigo, Projeto

from django.template import Context, loader

#TA DANDO ERROOOO
def index(request):
blog_list = (Artigo,Projeto).objects.all().order_by('-id')
t = loader.get_template('index.html')
c = Context({'blog_list':blog_list,})
return HttpResponse(t.render(c))

def sobre(request):
blog_list = Sobre.objects.all().order_by('-id')
t = loader.get_template('sobre.html')
c = Context({'blog_list':blog_list,})
return HttpResponse(t.render(c))

def artigos(request):
blog_list = Artigo.objects.all().order_by('-id')
t = loader.get_template('artigos.html')
c = Context({'blog_list':blog_list,})
return HttpResponse(t.render(c))

def projetos(request):
blog_list = Projeto.objects.all().order_by('-id')
t = loader.get_template('projetos.html')
c = Context({'blog_list':blog_list,})
return HttpResponse(t.render(c))

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos por partes... Primeiro os modelos...

from blog.models import Sobre, Artigo, Projeto
 
def index(request):
    def order_by_date(obj):
        # Implemente a ordenação por data aqui utilizando o sorted:
        # https://wiki.python.org/moin/HowTo/Sorting
        from operator import attrgetter
        return sorted(obj, key=attrgetter('data'), reverse=True)
 
    blog_list = []
    blog_list.extend(Artigo.objects.all())
    blog_list.extend(Projeto.objects.all())
    blog_list = order_by_date(blog_list)
   
    t = loader.get_template('index.html')
    c = Context({'blog_list':blog_list,})
    return HttpResponse(t.render(c))

Ou, se você realmente quiser usar SQL: https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly

 

Eu realmente me concentraria em refinar o modelo (veja que os campos são iguais nos dois modelos):

from django.db import models
 
class Artigo(models.Model):
    titulo = models.CharField(max_length=100)
    imagem = models.ImageField(upload_to = "blog/uploads/artigos")
    conteudo = models.TextField()
    data = models.DateField() 


class Projeto(models.Model):
    titulo = models.CharField(max_length=100)
    imagem = models.ImageField(upload_to = "blog/uploads/projetos")
    conteudo = models.TextField()
    data = models.DateField()

Como tudo será tratado como um post, eu criaria o seguinte modelo:

from django.db import models
 
class CategoriasPost(models.Model):
    categoria = models.CharField(max_length=40, blank=False, null=False)
 
    def __unicode__(self):
       return self.categoria
 
 
class Post(models.Model):
    titulo = models.CharField(max_length=100, blank=False, null=False)
    conteudo = models.TextField(blank=False, null=False) # Limite depende do banco.
    data = models.DateField(blank=False, null=False, auto_now=True)
    categorias = models.ManyToManyField(TiposPost)
 
    class Meta:
       ordering = ('-data',)
       verbose_name = 'post'
       verbose_name_plural = 'posts'

E dado que blog é algo comum de ser feito em Django, existem vários pacotes que implementam essa ideia de categorização de posts. Basta instalar e usar.

 

 

* * *

 

Quanto à página "Sobre", é uma página estática, podendo ser criada com um class-based view (https://docs.djangoproject.com/en/dev/topics/class-based-views/):

 

Assim, as imagens ficariam num diretório static (especificado no settings.py por STATIC_ROOT) depois de você executar o comando collectstatic e poderiam ser referenciadas normalmente dentro uma página HTML simples, que não passa pelo banco de dados. (https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/)

Compartilhar este post


Link para o post
Compartilhar em outros sites

muito obrigado isis....desculpa minha ignorancia ainda...é q sou iniciante em django...consegui fazer...fiz de um jeito parecido do seu... fiz um unico model chamado postagem...e nele coloquei um choices (um listbox) com os valores artigos e projetos...e no views eu programei para que no index aparece todas as postagem e no item do menu artigos aparecesse apenas as opções onde na coluna opcao do choices tivesse o nome artigos e assim consequentemente no item projetos e deu certo....muito obrigado vc me ajudou muito ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.