-
Notifications
You must be signed in to change notification settings - Fork 0
views ‐ Funciones de filtrado de posts
Guillermo Nicolás Petcho edited this page Oct 11, 2024
·
6 revisions
Filtrar publicaciones por:
- Categoria.
- Antigüedad (asc y desc).
- Orden alfabético (asc y desc).
def listar_posts(request):
posts = Post.objects.all() # Obtén todos los posts
categorias = Categoria.objects.all() # Obtén todas las categorías
ultimosposts = Post.objects.all().order_by('fecha_publicacion') # Posts ordenados por fecha de publicación
ultimos_mensajes = MensajeContacto.objects.order_by('-fecha_envio')[:3] # Obtén los últimos 3 mensajes de contacto
# Filtrar posts si hay un parámetro de categoría en la URL
categoria_id = request.GET.get('categoria')
if categoria_id:
posts = posts.filter(categorias__id=categoria_id) # Filtrar posts por categoría
return render(request, 'inicio.html', {
'ultimosposts': ultimosposts,
'categorias': categorias,
'mostrar_categorias': True,
'mostrar_fechas': True,
'ultimos_mensajes': ultimos_mensajes
})
- Objetivo: Listar todos los posts en la página de inicio. Si se selecciona una categoría, filtra los posts por dicha categoría.
-
Variables principales:
-
posts
: Obtiene todos los posts de la base de datos. -
categorias
: Obtiene todas las categorías de posts. -
ultimosposts
: Lista de todos los posts, ordenados por fecha de publicación. -
ultimos_mensajes
: Obtiene los últimos 3 mensajes enviados desde el formulario de contacto, ordenados por fecha de envío.
-
-
Filtro de categoría: Si en la URL se incluye un parámetro
categoria
(?categoria=1
), se filtrarán los posts que pertenecen a esa categoría. -
Contexto enviado a la plantilla
inicio.html
: Se pasan los posts, categorías, mensajes recientes, y se indican valores comomostrar_categorias
ymostrar_fechas
que controlan la visibilidad de ciertos elementos.
def listar_categorias(request):
categorias = Categoria.objects.all() # Obtén todas las categorías
posts = Post.objects.all() # También obtén todos los posts
return render(request, 'base.html', {
'categorias': categorias,
'posts': posts,
'mostrar_cargas': True,
'mostrar_fechas': True
})
- Objetivo: Listar todas las categorías y los posts en una página.
-
Contexto enviado a la plantilla
base.html
: Incluye las categorías y los posts, además de los controles para mostrar fechas y cargas (tal vez imágenes o recursos adicionales).
def listar_posts_por_categoria(request, categoria_id):
categoria = get_object_or_404(Categoria, id=categoria_id) # Obtener la categoría por ID o dar error 404
posts = Post.objects.filter(categorias=categoria) # Filtra posts por categoría seleccionada
categorias = Categoria.objects.all() # Obtener todas las categorías
return render(request, 'filtrado_categorias.html', {
'posts': posts,
'categorias': categorias,
'mostrar_categorias': True,
'mostrar_fechas': True,
'mostrar_cargas': True
})
- Objetivo: Mostrar los posts que pertenecen a una categoría específica.
-
categoria = get_object_or_404(Categoria, id=categoria_id)
: Busca una categoría con elcategoria_id
proporcionado. Si no la encuentra, devuelve un error 404. -
Contexto enviado a
filtrado_categorias.html
: Se incluyen los posts filtrados por la categoría seleccionada y todas las categorías (para usarlas como filtros o en un menú lateral).
def listar_posts_alfabeticamente(request):
categorias = Categoria.objects.all() # Obtén todas las categorías
orden = request.GET.get('orden', 'asc') # Obtener el orden de la URL, ascendente por defecto
if orden == 'desc':
ultimosposts = Post.objects.all().order_by('-titulo')[:4] # Ordenar de Z a A
else:
ultimosposts = Post.objects.all().order_by('titulo')[:4] # Ordenar de A a Z
return render(request, 'inicio.html', {
'ultimosposts': ultimosposts,
'mostrar_cargas': True,
'categorias': categorias,
'mostrar_fechas': True,
'mostrar_categorias': True
})
-
Objetivo: Mostrar los posts ordenados alfabéticamente por título, ya sea de A a Z o de Z a A, según el parámetro
orden
en la URL. -
orden = request.GET.get('orden', 'asc')
: Obtiene el valor del parámetroorden
de la URL (por ejemplo,?orden=desc
), y usa "asc" como valor predeterminado. -
Contexto enviado a
inicio.html
: Se pasan los posts ordenados, junto con las categorías y otros parámetros de control.
def fechas(request, tipo):
if tipo == 'recientes':
posts = Post.objects.all().order_by('-fecha_publicacion')[:4] # Más recientes
elif tipo == 'antiguos':
posts = Post.objects.all().order_by('fecha_publicacion')[:4] # Más antiguos
else:
posts = Post.objects.all() # Si el tipo no es válido, se muestran todos los posts
return render(request, 'inicio.html', {
'posts': posts,
'mostrar_cargas': True,
'mostrar_fechas': True,
'mostrar_categorias': True
})
- Objetivo: Filtrar los posts por fecha, ya sean los más recientes o los más antiguos.
-
tipo
: Es un parámetro que indica si se deben mostrar los posts más "recientes" o "antiguos". -
Contexto enviado a
inicio.html
: Se pasan los posts filtrados por fecha y otros parámetros de control.
Guillermo Petcho
Estudiante de Física y análisis de datos
GitHub | LinkedIn | Udemy
- Análisis de datos
- Física
- Python
- Estadística
- Campus Informatorio, Chaco
Soy un apasionado por la física y el análisis de datos. En mi tiempo libre, me gusta explorar nuevas tecnologías y mejorar mis habilidades en programación, especialmente en Python.