[UPDT] HORILLA VIEWS: Custom empty page configuration

This commit is contained in:
Horilla
2025-02-17 15:10:26 +05:30
parent 20f323a4c5
commit c4cdcc17f1
2 changed files with 41 additions and 24 deletions

View File

@@ -23,13 +23,12 @@ from horilla.filters import FilterSet
from horilla.group_by import group_by_queryset from horilla.group_by import group_by_queryset
from horilla.horilla_middlewares import _thread_locals from horilla.horilla_middlewares import _thread_locals
from horilla_views import models from horilla_views import models
from horilla_views.cbv_methods import ( from horilla_views.cbv_methods import ( # update_initial_cache,
get_short_uuid, get_short_uuid,
hx_request_required, hx_request_required,
paginator_qry, paginator_qry,
sortby, sortby,
structured, structured,
update_initial_cache,
update_saved_filter_cache, update_saved_filter_cache,
) )
from horilla_views.forms import DynamicBulkUpdateForm, ToggleColumnForm from horilla_views.forms import DynamicBulkUpdateForm, ToggleColumnForm
@@ -54,6 +53,11 @@ class HorillaListView(ListView):
columns: list = [] columns: list = []
search_url: str = "" search_url: str = ""
bulk_select_option: bool = True bulk_select_option: bool = True
filter_selected: bool = True
quick_export: bool = True
bulk_update: bool = True
custom_empty_template: str = ""
action_method: str = """""" action_method: str = """"""
""" """
@@ -112,7 +116,7 @@ class HorillaListView(ListView):
request = getattr(_thread_locals, "request", None) request = getattr(_thread_locals, "request", None)
self.request = request self.request = request
update_initial_cache(request, CACHE, HorillaListView) # # update_initial_cache(request, CACHE, HorillaListView)
# hidden columns configuration # hidden columns configuration
existing_instance = models.ToggleColumn.objects.filter( existing_instance = models.ToggleColumn.objects.filter(
@@ -203,9 +207,9 @@ class HorillaListView(ListView):
root_model=self.model, bulk_update_fields=self.bulk_update_fields root_model=self.model, bulk_update_fields=self.bulk_update_fields
) )
def get_queryset(self): def get_queryset(self, queryset=None, filtered=False, *args, **kwargs):
if not self.queryset: if not self.queryset:
self.queryset = super().get_queryset() self.queryset = super().get_queryset() if not queryset else queryset
self._saved_filters = QueryDict("", mutable=True) self._saved_filters = QueryDict("", mutable=True)
if self.filter_class: if self.filter_class:
query_dict = self.request.GET query_dict = self.request.GET
@@ -252,10 +256,12 @@ class HorillaListView(ListView):
query_dict._mutable = False query_dict._mutable = False
self._saved_filters = query_dict self._saved_filters = query_dict
self.request.exclude_filter_form = True self.request.exclude_filter_form = True
self.queryset = self.filter_class( if not filtered:
data=query_dict, queryset=self.queryset, request=self.request self.queryset = self.filter_class(
).qs data=query_dict, queryset=self.queryset, request=self.request
).qs
else:
self.queryset = queryset
if self.request.GET.get( if self.request.GET.get(
"show_all" "show_all"
) == "true" and self.request.session.get("hlv_selected_ids"): ) == "true" and self.request.session.get("hlv_selected_ids"):
@@ -295,10 +301,14 @@ class HorillaListView(ListView):
context["selected_instances_key_id"] = self.selected_instances_key_id context["selected_instances_key_id"] = self.selected_instances_key_id
context["row_status_indications"] = self.row_status_indications context["row_status_indications"] = self.row_status_indications
context["saved_filters"] = self._saved_filters context["saved_filters"] = self._saved_filters
context["quick_export"] = self.quick_export
context["filter_selected"] = self.filter_selected
context["bulk_update"] = self.bulk_update
if not self.verbose_name: if not self.verbose_name:
self.verbose_name = self.model.__class__ self.verbose_name = self.model.__class__
context["model_name"] = self.verbose_name context["model_name"] = self.verbose_name
context["export_fields"] = self.export_fields context["export_fields"] = self.export_fields
context["custom_empty_template"] = self.custom_empty_template
referrer = self.request.GET.get("referrer", "") referrer = self.request.GET.get("referrer", "")
if referrer: if referrer:
# Remove the protocol and domain part # Remove the protocol and domain part
@@ -388,7 +398,7 @@ class HorillaListView(ListView):
# instance.ordered_ids = ordered_ids # instance.ordered_ids = ordered_ids
# ordered_ids.append(instance.pk) # ordered_ids.append(instance.pk)
CACHE.get(self.request.session.session_key + "cbv")[HorillaListView] = context # CACHE.get(self.request.session.session_key + "cbv")[HorillaListView] = context
from horilla.urls import path, urlpatterns from horilla.urls import path, urlpatterns
self.export_path = f"export-list-view-{get_short_uuid(4)}/" self.export_path = f"export-list-view-{get_short_uuid(4)}/"
@@ -506,7 +516,7 @@ class HorillaSectionView(TemplateView):
super().__init__(**kwargs) super().__init__(**kwargs)
request = getattr(_thread_locals, "request", None) request = getattr(_thread_locals, "request", None)
self.request = request self.request = request
update_initial_cache(request, CACHE, HorillaListView) # update_initial_cache(request, CACHE, HorillaListView)
nav_url: str = "" nav_url: str = ""
view_url: str = "" view_url: str = ""
@@ -554,7 +564,7 @@ class HorillaDetailedView(DetailView):
super().__init__(**kwargs) super().__init__(**kwargs)
request = getattr(_thread_locals, "request", None) request = getattr(_thread_locals, "request", None)
self.request = request self.request = request
update_initial_cache(request, CACHE, HorillaDetailedView) # update_initial_cache(request, CACHE, HorillaDetailedView)
def get_context_data(self, **kwargs: Any): def get_context_data(self, **kwargs: Any):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
@@ -590,9 +600,9 @@ class HorillaDetailedView(DetailView):
context["action_method"] = self.action_method context["action_method"] = self.action_method
context["cols"] = self.cols context["cols"] = self.cols
CACHE.get(self.request.session.session_key + "cbv")[ # CACHE.get(self.request.session.session_key + "cbv")[
HorillaDetailedView # HorillaDetailedView
] = context # ] = context
return context return context
@@ -612,7 +622,7 @@ class HorillaTabView(TemplateView):
super().__init__(**kwargs) super().__init__(**kwargs)
request = getattr(_thread_locals, "request", None) request = getattr(_thread_locals, "request", None)
self.request = request self.request = request
update_initial_cache(request, CACHE, HorillaTabView) # update_initial_cache(request, CACHE, HorillaTabView)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
@@ -625,7 +635,7 @@ class HorillaTabView(TemplateView):
context["tabs"] = self.tabs context["tabs"] = self.tabs
context["view_id"] = self.view_id context["view_id"] = self.view_id
CACHE.get(self.request.session.session_key + "cbv")[HorillaTabView] = context # CACHE.get(self.request.session.session_key + "cbv")[HorillaTabView] = context
return context return context
@@ -678,7 +688,7 @@ class HorillaCardView(ListView):
super().__init__(**kwargs) super().__init__(**kwargs)
request = getattr(_thread_locals, "request", None) request = getattr(_thread_locals, "request", None)
self.request = request self.request = request
update_initial_cache(request, CACHE, HorillaCardView) # update_initial_cache(request, CACHE, HorillaCardView)
self._saved_filters = QueryDict() self._saved_filters = QueryDict()
def get_queryset(self): def get_queryset(self):
@@ -755,7 +765,7 @@ class HorillaCardView(ListView):
ordered_ids.append(instance.pk) ordered_ids.append(instance.pk)
self.request.session[f"ordered_ids_{self.model.__name__.lower()}"] = ordered_ids self.request.session[f"ordered_ids_{self.model.__name__.lower()}"] = ordered_ids
CACHE.get(self.request.session.session_key + "cbv")[HorillaCardView] = context # CACHE.get(self.request.session.session_key + "cbv")[HorillaCardView] = context
referrer = self.request.GET.get("referrer", "") referrer = self.request.GET.get("referrer", "")
if referrer: if referrer:
# Remove the protocol and domain part # Remove the protocol and domain part
@@ -871,7 +881,7 @@ class HorillaFormView(FormView):
self.request = request self.request = request
if not self.success_url: if not self.success_url:
self.success_url = self.request.path self.success_url = self.request.path
update_initial_cache(request, CACHE, HorillaFormView) # update_initial_cache(request, CACHE, HorillaFormView)
if self.form_class: if self.form_class:
setattr(self.form_class, "structured", structured) setattr(self.form_class, "structured", structured)
@@ -1063,7 +1073,7 @@ class HorillaFormView(FormView):
self.form_class.verbose_name = self.new_display_title self.form_class.verbose_name = self.new_display_title
form.close_button_attrs = self.close_button_attrs form.close_button_attrs = self.close_button_attrs
form.submit_button_attrs = self.submit_button_attrs form.submit_button_attrs = self.submit_button_attrs
CACHE.get(self.request.session.session_key + "cbv")[HorillaFormView] = form # CACHE.get(self.request.session.session_key + "cbv")[HorillaFormView] = form
self.form = form self.form = form
return self.form return self.form
@@ -1092,12 +1102,13 @@ class HorillaNavView(TemplateView):
empty_inputs: list = [] empty_inputs: list = []
view_types: list = [] view_types: list = []
create_attrs: str = """""" create_attrs: str = """"""
apply_first_filter = True
def __init__(self, **kwargs: Any) -> None: def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs) super().__init__(**kwargs)
request = getattr(_thread_locals, "request", None) request = getattr(_thread_locals, "request", None)
self.request = request self.request = request
update_initial_cache(request, CACHE, HorillaNavView) # update_initial_cache(request, CACHE, HorillaNavView)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
@@ -1111,6 +1122,7 @@ class HorillaNavView(TemplateView):
context["view_types"] = self.view_types context["view_types"] = self.view_types
context["create_attrs"] = self.create_attrs context["create_attrs"] = self.create_attrs
context["search_in"] = self.search_in context["search_in"] = self.search_in
context["apply_first_filter"] = self.apply_first_filter
context["filter_instance_context_name"] = self.filter_instance context["filter_instance_context_name"] = self.filter_instance
last_filter = CACHE.get( last_filter = CACHE.get(
self.request.session.session_key self.request.session.session_key
@@ -1125,7 +1137,7 @@ class HorillaNavView(TemplateView):
context["active_view"] = models.ActiveView.objects.filter( context["active_view"] = models.ActiveView.objects.filter(
path=self.request.path path=self.request.path
).first() ).first()
CACHE.get(self.request.session.session_key + "cbv")[HorillaNavView] = context # CACHE.get(self.request.session.session_key + "cbv")[HorillaNavView] = context
return context return context
@@ -1157,7 +1169,7 @@ class HorillaProfileView(DetailView):
request = getattr(_thread_locals, "request", None) request = getattr(_thread_locals, "request", None)
self.request = request self.request = request
update_initial_cache(request, CACHE, HorillaProfileView) # update_initial_cache(request, CACHE, HorillaProfileView)
from horilla.urls import path, urlpatterns from horilla.urls import path, urlpatterns

View File

@@ -353,6 +353,7 @@
{% endfor %} {% endfor %}
</div> </div>
{% endif %} {% endif %}
{% if not custom_empty_template %}
<div class="oh-wrapper" align="center" style="margin-top: 7vh; margin-bottom:7vh;"> <div class="oh-wrapper" align="center" style="margin-top: 7vh; margin-bottom:7vh;">
<div align="center"> <div align="center">
<img src="{% static "images/ui/search.svg" %}" class="oh-404__image" alt="Page not found. 404."> <img src="{% static "images/ui/search.svg" %}" class="oh-404__image" alt="Page not found. 404.">
@@ -362,6 +363,10 @@
</p> </p>
</div> </div>
</div> </div>
{% else %}
{% include custom_empty_template %}
{% endif %}
{% endif %} {% endif %}
<script> <script>
setTimeout(() => { setTimeout(() => {