Merge pull request 'Display/CSS fixes' (#88) from css into main
Reviewed-on: #88
This commit is contained in:
commit
a37b0d4a13
3 changed files with 71 additions and 58 deletions
|
@ -1,4 +1,5 @@
|
|||
from django import forms
|
||||
from django.db.models import Q
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from servala.core.models import (
|
||||
|
@ -18,13 +19,17 @@ class ServiceFilterForm(forms.Form):
|
|||
cloud_provider = forms.ModelChoiceField(
|
||||
queryset=CloudProvider.objects.all(), required=False
|
||||
)
|
||||
q = forms.CharField(required=False)
|
||||
q = forms.CharField(label=_("Search"), required=False)
|
||||
|
||||
def filter_queryset(self, queryset):
|
||||
if category := self.cleaned_data.get("category"):
|
||||
queryset = queryset.filter(category=category)
|
||||
if cloud_provider := self.cleaned_data.get("cloud_provider"):
|
||||
queryset = queryset.filter(offerings__provider=cloud_provider)
|
||||
if search := self.cleaned_data.get("q"):
|
||||
queryset = queryset.filter(
|
||||
Q(name__icontains=search) | Q(category__name__icontains=search)
|
||||
)
|
||||
return queryset
|
||||
|
||||
|
||||
|
|
|
@ -28,38 +28,42 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% for offering in service.offerings.all %}
|
||||
<div class="card col-6 col-lg-3 col-md-4">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
{% if offering.provider.logo %}
|
||||
<img src="{{ offering.provider.logo.url }}"
|
||||
alt="{{ offering.provider.name }}"
|
||||
class="me-3"
|
||||
style="max-width: 48px;
|
||||
max-height: 48px">
|
||||
{% endif %}
|
||||
<div class="d-flex flex-column">
|
||||
<h4 class="mb-0">{{ offering.provider.name }}</h4>
|
||||
<div class="row">
|
||||
{% for offering in service.offerings.all %}
|
||||
<div class="col-6 col-lg-3 col-md-4">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
{% if offering.provider.logo %}
|
||||
<img src="{{ offering.provider.logo.url }}"
|
||||
alt="{{ offering.provider.name }}"
|
||||
class="me-3"
|
||||
style="max-width: 48px;
|
||||
max-height: 48px">
|
||||
{% endif %}
|
||||
<div class="d-flex flex-column">
|
||||
<h4 class="mb-0">{{ offering.provider.name }}</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if offering.description %}
|
||||
<p class="card-text">{{ offering.description }}</p>
|
||||
{% elif offering.provider.description %}
|
||||
<p class="card-text">{{ offering.provider.description }}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="card-footer d-flex justify-content-between">
|
||||
<span></span>
|
||||
<a href="offering/{{ offering.pk }}/" class="btn btn-light-primary">{% translate "Read More" %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if offering.description %}
|
||||
<p class="card-text">{{ offering.description }}</p>
|
||||
{% elif offering.provider.description %}
|
||||
<p class="card-text">{{ offering.provider.description }}</p>
|
||||
{% endif %}
|
||||
{% empty %}
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<p>{% translate "No offerings found." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer d-flex justify-content-between">
|
||||
<span></span>
|
||||
<a href="offering/{{ offering.pk }}/" class="btn btn-light-primary">{% translate "Read More" %}</a>
|
||||
</div>
|
||||
</div>
|
||||
{% empty %}
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<p>{% translate "No offerings found." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
{% endblock content %}
|
||||
|
|
|
@ -16,36 +16,40 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% for service in services %}
|
||||
<div class="card col-6 col-lg-3 col-md-4">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
{% if service.logo %}
|
||||
<img src="{{ service.logo.url }}"
|
||||
alt="{{ service.name }}"
|
||||
class="me-3"
|
||||
style="max-width: 48px;
|
||||
max-height: 48px">
|
||||
{% endif %}
|
||||
<div class="d-flex flex-column">
|
||||
<h4 class="mb-0">{{ service.name }}</h4>
|
||||
<small class="text-muted">{{ service.category }}</small>
|
||||
<div class="row">
|
||||
{% for service in services %}
|
||||
<div class="col-6 col-lg-3 col-md-4">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex align-items-center">
|
||||
{% if service.logo %}
|
||||
<img src="{{ service.logo.url }}"
|
||||
alt="{{ service.name }}"
|
||||
class="me-3"
|
||||
style="max-width: 48px;
|
||||
max-height: 48px">
|
||||
{% endif %}
|
||||
<div class="d-flex flex-column">
|
||||
<h4 class="mb-0">{{ service.name }}</h4>
|
||||
<small class="text-muted">{{ service.category }}</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if service.description %}<p class="card-text">{{ service.description }}</p>{% endif %}
|
||||
</div>
|
||||
<div class="card-footer d-flex justify-content-between">
|
||||
<span></span>
|
||||
<a href="{{ service.slug }}/" class="btn btn-light-primary">{% translate "Read More" %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if service.description %}<p class="card-text">{{ service.description }}</p>{% endif %}
|
||||
{% empty %}
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<p>{% translate "No services found." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer d-flex justify-content-between">
|
||||
<span></span>
|
||||
<a href="{{ service.slug }}/" class="btn btn-light-primary">{% translate "Read More" %}</a>
|
||||
</div>
|
||||
</div>
|
||||
{% empty %}
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<p>{% translate "No services found." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
<script src="{% static "js/autosubmit.js" %}" defer></script>
|
||||
{% endblock content %}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue