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):
|
def proposed_events(self):
|
||||||
threshold_distance = 30000
|
threshold_distance = 30000
|
||||||
min_tags = 1
|
min_tags = 1
|
||||||
|
@ -1319,8 +1319,10 @@ table .buttons {
|
|||||||
margin: 0 1em;
|
margin: 0 1em;
|
||||||
img {
|
img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@media only screen and (min-width: 512px) {
|
||||||
margin: -4em 0 0 0;
|
margin: -4em 0 0 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2186,3 +2188,8 @@ dialog {
|
|||||||
}
|
}
|
||||||
margin-bottom: 1em;
|
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:
|
else:
|
||||||
return o
|
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):
|
def get_success_url(self):
|
||||||
return self.get_object().get_absolute_url() + "#chronology"
|
return self.get_object().get_absolute_url() + "#chronology"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user