parent
98a13aee35
commit
5353b0d68e
@ -1053,6 +1053,28 @@ class Event(models.Model):
|
||||
),
|
||||
]
|
||||
|
||||
def alternative_events_if_not_found(day, slug):
|
||||
title = slug.replace("-", " ")
|
||||
logger.warning(title)
|
||||
qs = (
|
||||
Event.objects.filter(
|
||||
Q(other_versions__isnull=True)
|
||||
| Q(other_versions__representative=F("pk"))
|
||||
| Q(other_versions__representative__isnull=True)
|
||||
)
|
||||
.filter(status=Event.STATUS.PUBLISHED)
|
||||
.annotate(similarity_title=TrigramSimilarity("title", title))
|
||||
.annotate(
|
||||
nbday_distance=Func((ExtractDay(F("start_day") - day)), function="ABS")
|
||||
)
|
||||
.annotate(
|
||||
score=F("similarity_title") * 200 + 30 / (F("nbday_distance") + 1)
|
||||
)
|
||||
.order_by("-score")[:10]
|
||||
)
|
||||
|
||||
return qs.only("title", "start_day", "start_time", "exact_location", "location")
|
||||
|
||||
def proposed_events(self):
|
||||
threshold_distance = 30000
|
||||
min_tags = 1
|
||||
|
@ -1319,9 +1319,11 @@ table .buttons {
|
||||
margin: 0 1em;
|
||||
img {
|
||||
width: 100%;
|
||||
@media only screen and (min-width: 512px) {
|
||||
margin: -4em 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
img.preview {
|
||||
@ -2186,3 +2188,8 @@ dialog {
|
||||
}
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.first-large .slim-description:first-child {
|
||||
@extend article;
|
||||
font-size: 110%;
|
||||
}
|
||||
|
48
src/agenda_culturel/templates/page-event-not-found.html
Normal file
48
src/agenda_culturel/templates/page-event-not-found.html
Normal file
@ -0,0 +1,48 @@
|
||||
{% extends "agenda_culturel/page.html" %}
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% load utils_extra %}
|
||||
{% load static_content_extra %}
|
||||
{% block fluid %}{% endblock %}
|
||||
{% block title %}
|
||||
{% block og_title %}On a pommé l'événement{% endblock %}
|
||||
{% endblock %}
|
||||
{% block description %}
|
||||
{% block og_description %}On a rencontré un pépin en cherchant l'événement que tu as demandé !{% endblock %}
|
||||
{% endblock %}
|
||||
{% block og_image %}
|
||||
{% static 'images/pommes.svg' %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<article>
|
||||
<header>
|
||||
<h1>On a pommé l'événement</h1>
|
||||
</header>
|
||||
<div class="image-flottante">
|
||||
<img src="{% static 'images/pommes.svg' %}"
|
||||
alt="quelques pommes et leur pépins" />
|
||||
</div>
|
||||
<p>
|
||||
On a rencontré un pépin en cherchant l'événement que tu as demandé. Mais pas de panique, on a regardé un peu
|
||||
dans nos paniers, et on te propose quelques événements qui pourraient correspondre à ta recherche.
|
||||
</p>
|
||||
<div class="first-large">
|
||||
{% for pe in alternative_events %}
|
||||
{% include "agenda_culturel/single-event/event-slim-inc.html" with event=pe %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</article>
|
||||
<article class="search" id="search">
|
||||
<header>
|
||||
<h2>Rien trouvé ?</h2>
|
||||
<p>Si tu n'as pas trouvé ton bonheur dans toutes ces pages, tu peux aussi fouiller le site :</p>
|
||||
</header>
|
||||
<form method="get" class="form django-form">
|
||||
{{ filter.form.as_div }}
|
||||
<button type="submit">Rechercher</button>
|
||||
<a href="{% url 'event_search' %}">Recherche simplifiée {% picto_from_name "chevron-right" %}</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
{% endblock %}
|
@ -767,6 +767,34 @@ class EventDetailView(UserPassesTestMixin, DetailView, ModelFormMixin):
|
||||
else:
|
||||
return o
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
try:
|
||||
self.object = self.get_object()
|
||||
except Http404 as e:
|
||||
if "year" in self.kwargs:
|
||||
y = self.kwargs["year"]
|
||||
m = self.kwargs["month"]
|
||||
d = self.kwargs["day"]
|
||||
day = date(y, m, d)
|
||||
s = self.kwargs["extra"]
|
||||
qs = get_event_qs(request)
|
||||
filter = SimpleSearchEventFilter(
|
||||
request.GET,
|
||||
queryset=qs,
|
||||
request=request,
|
||||
)
|
||||
context = {
|
||||
"alternative_events": Event.alternative_events_if_not_found(day, s),
|
||||
"filter": filter,
|
||||
}
|
||||
return render(
|
||||
request, "page-event-not-found.html", status=404, context=context
|
||||
)
|
||||
else:
|
||||
raise e
|
||||
context = self.get_context_data(object=self.object)
|
||||
return self.render_to_response(context)
|
||||
|
||||
def get_success_url(self):
|
||||
return self.get_object().get_absolute_url() + "#chronology"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user