style partner detail

This commit is contained in:
Tobias Brunner 2025-02-25 13:43:28 +01:00
parent fc06226f5a
commit 869ec8bb8e
No known key found for this signature in database
4 changed files with 87 additions and 59 deletions

View file

@ -1,71 +1,77 @@
{% extends 'services/base.html' %}
{% block content %}
<div class="card">
<div class="card-body">
<div class="d-flex align-items-start mb-4">
{% if partner.logo %}
<img src="{{ partner.logo.url }}" alt="{{ partner.name }} logo" class="me-4"
style="max-height: 120px; max-width: 240px; object-fit: contain;">
{% endif %}
<div>
<h2 class="card-title mb-3">{{ partner.name }}</h2>
{% if partner.website %}
<a href="{{ partner.website }}" class="btn btn-outline-primary mb-3" target="_blank">
Visit Website
</a>
{% endif %}
<div class="rich-text-content">
{{ partner.description|safe }}
<section class="section bg-primary-subtle">
<div class="container mx-auto px-20 px-lg-0 pt-40 pb-60">
<div class="row align-items-center">
<div class="col-12 col-lg-5 mb-47 mb-lg-0">
<header class="section-primary__header">
<h2 class="section-h1 fs-40 fs-lg-64 mb-14">{{ partner.name }}</h2>
<div class="text-gray-300 mb-14">
<div class="rich-text-content">
{{ partner.description|safe }}
</div>
</div>
{% if partner.website %}
<div>
<a class="btn btn-primary btn-lg" href="{{ partner.website }}" target="_blank" role="button">Visit Website</a>
</div>
{% endif %}
</header>
</div>
<div class="col-12 col-lg-7">
<div>
{% if partner.logo %}
<img class="img-fluid d-block ml-lg-auto" src="{{ partner.logo.url }}" alt="{{ partner.name }} logo">
{% endif %}
</div>
</div>
</div>
</div>
</section>
<h3 class="mb-4">Available Services</h3>
<div class="row row-cols-1 row-cols-md-2 g-4">
{% for service in services %}
<div class="col">
<div class="card h-100">
<div class="card-body">
<div class="d-flex align-items-center mb-3">
{% if service.logo %}
<div class="container mx-auto px-20 px-lg-0 py-60">
<h3 class="section-h2 fs-32 fs-lg-48 mb-40 mt-5">Available Services</h3>
<p>{{ partner.name }} provides consulting services for the following services</p>
<div class="row row-cols-1 row-cols-md-2 g-4">
{% for service in services %}
<div class="col">
<div class="card h-100">
<div class="card-body">
<div class="d-flex align-items-center mb-3">
{% if service.logo %}
<a href="{{ service.get_absolute_url }}">
<img src="{{ service.logo.url }}" alt="{{ service.name }} logo"
class="me-3" style="max-height: 50px; max-width: 100px; object-fit: contain;">
{% endif %}
<div>
<h5 class="card-title mb-0">{{ service.name }}</h5>
<div class="d-flex align-items-center mt-2">
{% if service.cloud_provider.logo %}
<img src="{{ service.cloud_provider.logo.url }}" alt="{{ service.cloud_provider.name }} logo"
class="me-2" style="max-height: 25px; max-width: 50px; object-fit: contain;">
{% endif %}
<h6 class="card-subtitle text-muted mb-0">
<a href="{{ service.cloud_provider.get_absolute_url }}"
class="text-decoration-none text-muted">{{ service.cloud_provider.name }}</a>
</h6>
</div>
</a>
{% endif %}
<div>
<h5 class="card-title mb-0"><a href="{{ service.get_absolute_url }}" class="text-decoration-none">{{ service.name }}</a></h5>
<div class="d-flex align-items-center mt-2">
{% if service.cloud_provider.logo %}
<img src="{{ service.cloud_provider.logo.url }}" alt="{{ service.cloud_provider.name }} logo"
class="me-2" style="max-height: 25px; max-width: 50px; object-fit: contain;">
{% endif %}
<h6 class="card-subtitle text-muted mb-0">
<a href="{{ service.cloud_provider.get_absolute_url }}"
class="text-decoration-none text-muted">{{ service.cloud_provider.name }}</a>
</h6>
</div>
</div>
<div class="card-text description-preview mb-3">
{{ service.description|safe|truncatewords_html:30 }}
</div>
<div class="mb-2">
{% for category in service.categories.all %}
<span class="badge bg-secondary me-1">{{ category.full_path }}</span>
{% endfor %}
</div>
<a href="{{ service.get_absolute_url }}" class="btn btn-primary">View Details</a>
</div>
<div class="card-text description-preview mb-3">
{{ service.description|safe|truncatewords_html:30 }}
</div>
</div>
</div>
{% empty %}
<div class="col-12">
<div class="alert alert-info">
No services available from this partner yet.
</div>
</div>
{% empty %}
<div class="col-12">
<div class="alert alert-info">
No services available from this partner yet.
</div>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}

View file

@ -72,6 +72,23 @@
</button>
</div>
<!-- Service Filter -->
<div class="pt-24 mb-24">
<div class="d-flex justify-content-between align-items-center h-33 mb-5px" role="button">
<h3 class="sidebar-title mb-0">Service</h3>
</div>
<div>
<select class="form-select" id="service" name="service" @change="submitForm()">
<option value="">All Services</option>
{% for service in services %}
<option value="{{ service.id }}" {% if request.GET.service == service.id|stringformat:'i' %}selected{% endif %}>
{{ service.name }}
</option>
{% endfor %}
</select>
</div>
</div>
<!-- Cloud Provider Filter -->
<div class="pt-24 mb-24">
<div class="d-flex justify-content-between align-items-center h-33 mb-5px" role="button">

View file

@ -18,7 +18,7 @@ def offering_list(request):
cloud_providers = CloudProvider.objects.all()
categories = Category.objects.filter(parent=None).prefetch_related("children")
services = Service.objects.all().order_by("name") # Add this line
services = Service.objects.all().order_by("name")
# Handle cloud provider filter
if request.GET.get("cloud_provider"):
@ -34,7 +34,7 @@ def offering_list(request):
Q(service__categories=category) | Q(service__categories__in=subcategories)
).distinct()
# Add service filter handling
# Handle service filter
if request.GET.get("service"):
service_id = request.GET.get("service")
offerings = offerings.filter(service_id=service_id)

View file

@ -1,9 +1,6 @@
from django.shortcuts import render, get_object_or_404
from django.db.models import Q
from hub.services.models import (
ConsultingPartner,
CloudProvider,
)
from hub.services.models import ConsultingPartner, CloudProvider, Service
def partner_list(request):
@ -11,11 +8,18 @@ def partner_list(request):
"services", "cloud_providers"
)
services = Service.objects.all().order_by("name")
# Handle cloud provider filter
if request.GET.get("cloud_provider"):
provider_id = request.GET.get("cloud_provider")
partners = partners.filter(cloud_providers__id=provider_id)
# Handle service filter
if request.GET.get("service"):
service_id = request.GET.get("service")
partners = partners.filter(services__id=service_id)
# Handle search
if request.GET.get("search"):
query = request.GET.get("search")
@ -25,6 +29,7 @@ def partner_list(request):
context = {
"partners": partners,
"services": services,
"cloud_providers": CloudProvider.objects.all(),
}
return render(request, "services/partner_list.html", context)