From c00ba181537db751259b0efca3d2224703cf87c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20Caux?= <git@jscaux.org> Date: Fri, 11 Feb 2022 07:56:27 +0100 Subject: [PATCH] Optimize `_hx_journals` --- scipost_django/ontology/context_processors.py | 3 +- .../scipost/portal/_hx_journals.html | 33 +++++++++---------- .../scipost/templatetags/scipost_extras.py | 4 +-- scipost_django/scipost/urls.py | 2 +- scipost_django/scipost/views.py | 26 +++++++++++++-- 5 files changed, 43 insertions(+), 25 deletions(-) diff --git a/scipost_django/ontology/context_processors.py b/scipost_django/ontology/context_processors.py index 4bf67e3c8..23a693c00 100644 --- a/scipost_django/ontology/context_processors.py +++ b/scipost_django/ontology/context_processors.py @@ -19,7 +19,8 @@ def ontology_processor(request): if request.session.get('session_acad_field_slug', None): try: context['session_acad_field'] = AcademicField.objects.get( - slug=request.session.get('session_acad_field_slug')) + slug=request.session.get('session_acad_field_slug'), + ) initial_acad_field['acad_field_slug'] = request.session.get('session_acad_field_slug') except AcademicField.DoesNotExist: context['session_acad_field'] = None diff --git a/scipost_django/scipost/templates/scipost/portal/_hx_journals.html b/scipost_django/scipost/templates/scipost/portal/_hx_journals.html index 0dea409b7..64b64dc8b 100644 --- a/scipost_django/scipost/templates/scipost/portal/_hx_journals.html +++ b/scipost_django/scipost/templates/scipost/portal/_hx_journals.html @@ -7,7 +7,7 @@ {% if session_acad_field %} <div class="row"> - {% for journal in session_acad_field.journals %} + {% for journal in journals %} {% if journal.active or perms.scipost.can_view_pool %} <div class="col-md-6 col-lg-4 mb-2" style="{{ journal.style }}"> <div class="card"> @@ -46,25 +46,22 @@ <h2 class="highlight">Full list of our Journals</h2> <table class="table table-borderless"> - {% for branch in branches %} - {% for acad_field in branch.academic_fields.all %} - {% if acad_field.journals.active.all|length > 0 %} - <tr> - <td class="align-middle"><strong>{{ acad_field.name }}</strong></td> - <td> - <ul class="list-group m-2"> - {% for journal in acad_field.journals.active.all %} - <li class="list-group-item m-1 px-3 py-2 {{ journal.doi_label }}"> - <a href="{{ journal.get_absolute_url }}">{{ journal.name }}</a> - </li> - {% endfor %} - </ul> - </td> - </tr> - {% endif %} + {% for branch, branch_journals in journals_dict.items %} + {% for field, field_journals in branch_journals.items %} + <tr> + <td class="align-middle"><strong>{{ field }}</strong></td> + <td> + <ul class="list-group m-2"> + {% for journal in field_journals %} + <li class="list-group-item m-1 px-3 py-2 {{ journal.doi_label }}"> + <a href="{{ journal.get_absolute_url }}">{{ journal.name }}</a> + </li> + {% endfor %} + </ul> + </td> + </tr> {% endfor %} {% endfor %} </table> - {% endif %} diff --git a/scipost_django/scipost/templatetags/scipost_extras.py b/scipost_django/scipost/templatetags/scipost_extras.py index 6526c2a83..6f8162628 100644 --- a/scipost_django/scipost/templatetags/scipost_extras.py +++ b/scipost_django/scipost/templatetags/scipost_extras.py @@ -72,8 +72,8 @@ def get_admin_url(obj): def increment_dt(dt): try: delta = abs(int(dt)) - if delta >= 4: - return random.randint(delta, int(1.25*delta)) + if delta >= 8: + return random.randint(delta, int(1.4*delta)) except: pass return random.randint(8, 12) diff --git a/scipost_django/scipost/urls.py b/scipost_django/scipost/urls.py index 3fa117fb9..5cd3eac9e 100644 --- a/scipost_django/scipost/urls.py +++ b/scipost_django/scipost/urls.py @@ -85,7 +85,7 @@ urlpatterns = [ ), path( 'portal/_hx_journals', - TemplateView.as_view(template_name='scipost/portal/_hx_journals.html'), + views.portal_hx_journals, name='portal_hx_journals' ), path( diff --git a/scipost_django/scipost/views.py b/scipost_django/scipost/views.py index a75fb53fc..786aa9ac6 100644 --- a/scipost_django/scipost/views.py +++ b/scipost_django/scipost/views.py @@ -168,9 +168,6 @@ def index(request): request.session['session_specialty_slug'] = '' request.session['session_acad_field_slug'] = request.GET['field'] context = { - 'news_items': NewsItem.objects.homepage().order_by('-date')[:3], - 'publications': Publication.objects.published( - ).order_by('-publication_date', '-paper_nr')[:3], 'load_header_forms': request.GET.get('tab', None) != None } return render(request, 'scipost/portal/portal.html', context) @@ -195,6 +192,29 @@ def portal_hx_home(request): return render(request, 'scipost/portal/_hx_home.html', context) +def portal_hx_journals(request): + session_acad_field_slug = request.session.get('session_acad_field_slug', None) + journals = Journal.objects.active().select_related('college__acad_field__branch') + context = {} + if session_acad_field_slug and session_acad_field_slug != 'all': + journals = journals.filter( + college__acad_field__slug=session_acad_field_slug, + ).prefetch_related('series_set') + context['journals'] = journals + else: # build a dictionary of journals per branch / acad_field + journals_dict = {} + for journal in journals.all(): + branch_name = journal.college.acad_field.branch.name + acad_field_name = journal.college.acad_field.name + if branch_name not in journals_dict: + journals_dict[branch_name] = {} + if acad_field_name not in journals_dict[branch_name]: + journals_dict[branch_name][acad_field_name] = [] + journals_dict[branch_name][acad_field_name].append(journal) + context['journals_dict'] = journals_dict + return render(request, 'scipost/portal/_hx_journals.html', context) + + def portal_hx_publications(request): form = PublicationSearchForm( acad_field_slug=request.session.get('session_acad_field_slug', None), -- GitLab