feat: Add basic embeddable view for ans of rescue orgs
This commit is contained in:
0
src/fellchensammlung/aviews/__init__.py
Normal file
0
src/fellchensammlung/aviews/__init__.py
Normal file
18
src/fellchensammlung/aviews/embeddables.py
Normal file
18
src/fellchensammlung/aviews/embeddables.py
Normal file
@@ -0,0 +1,18 @@
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
|
||||
from fellchensammlung.aviews.helpers import headers
|
||||
from fellchensammlung.models import RescueOrganization, AdoptionNotice, Species
|
||||
|
||||
|
||||
@headers({"X-Robots-Tag": "noindex"})
|
||||
def list_ans_per_rescue_organization(request, rescue_organization_id, species_slug=None):
|
||||
org = get_object_or_404(RescueOrganization, pk=rescue_organization_id)
|
||||
if species_slug is None:
|
||||
adoption_notices = AdoptionNotice.objects.filter(organization=org)
|
||||
else:
|
||||
ans_of_rescue_org = AdoptionNotice.objects.filter(organization=org)
|
||||
species = get_object_or_404(Species, slug=species_slug)
|
||||
adoption_notices = [adoption_notice for adoption_notice in ans_of_rescue_org if species in adoption_notice.species]
|
||||
|
||||
template = 'fellchensammlung/embeddables/list-adoption-notices.html'
|
||||
return render(request, template, context={"adoption_notices": adoption_notices})
|
23
src/fellchensammlung/aviews/helpers.py
Normal file
23
src/fellchensammlung/aviews/helpers.py
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
def headers(headers):
|
||||
"""Decorator adding arbitrary HTTP headers to the response.
|
||||
|
||||
This decorator adds HTTP headers specified in the argument (map), to the
|
||||
HTTPResponse returned by the function being decorated.
|
||||
|
||||
Example:
|
||||
|
||||
@headers({'Refresh': '10', 'X-Bender': 'Bite my shiny, metal ass!'})
|
||||
def index(request):
|
||||
....
|
||||
Source: https://djangosnippets.org/snippets/275/
|
||||
"""
|
||||
def headers_wrapper(fun):
|
||||
def wrapped_function(*args, **kwargs):
|
||||
response = fun(*args, **kwargs)
|
||||
for key in headers:
|
||||
response[key] = headers[key]
|
||||
return response
|
||||
return wrapped_function
|
||||
return headers_wrapper
|
||||
|
12
src/fellchensammlung/aviews/urls.py
Normal file
12
src/fellchensammlung/aviews/urls.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from django.urls import path
|
||||
|
||||
from . import embeddables
|
||||
|
||||
urlpatterns = [
|
||||
path("tierschutzorganisationen/<int:rescue_organization_id>/vermittlungen/",
|
||||
embeddables.list_ans_per_rescue_organization,
|
||||
name="list-adoption-notices-for-rescue-organization"),
|
||||
path("tierschutzorganisationen/<int:rescue_organization_id>/vermittlungen/<slug:species_slug>/",
|
||||
embeddables.list_ans_per_rescue_organization,
|
||||
name="list-adoption-notices-for-rescue-organization-species"),
|
||||
]
|
@@ -421,6 +421,13 @@ class AdoptionNotice(models.Model):
|
||||
num_per_sex[sex] = self.animals.filter(sex=sex).count()
|
||||
return num_per_sex
|
||||
|
||||
@property
|
||||
def species(self):
|
||||
species = set()
|
||||
for animal in self.animals:
|
||||
species.add(animal.species)
|
||||
return species
|
||||
|
||||
@property
|
||||
def last_checked_hr(self):
|
||||
time_since_last_checked = timezone.now() - self.last_checked
|
||||
@@ -466,7 +473,6 @@ class AdoptionNotice(models.Model):
|
||||
def description_100_short(self):
|
||||
return self._get_short_description(90)
|
||||
|
||||
|
||||
def get_absolute_url(self):
|
||||
"""Returns the url to access a detailed page for the adoption notice."""
|
||||
return reverse('adoption-notice-detail', args=[str(self.id)])
|
||||
|
@@ -0,0 +1,43 @@
|
||||
{% load custom_tags %}
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% get_current_language as LANGUAGE_CODE %}
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ LANGUAGE_CODE }}">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
{% block title %}{% endblock %}
|
||||
{% block og_title %}{% endblock %}
|
||||
{% block description %}{% endblock %}
|
||||
{% block og_description %}{% endblock %}
|
||||
{% block og_image %}{% endblock %}
|
||||
<link rel="canonical" href="{% block canonical_url %}{% endblock %}">
|
||||
|
||||
<!-- Add additional CSS in static file -->
|
||||
<link rel="stylesheet" href="{% static 'fellchensammlung/css/main.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'fellchensammlung/css/photoswipe.css' %}">
|
||||
<link href="{% static 'fontawesomefree/css/fontawesome.css' %}" rel="stylesheet" type="text/css">
|
||||
<link href="{% static 'fontawesomefree/css/brands.css' %}" rel="stylesheet" type="text/css">
|
||||
<link href="{% static 'fontawesomefree/css/solid.css' %}" rel="stylesheet" type="text/css">
|
||||
|
||||
<script src="{% static 'fellchensammlung/js/custom.js' %}"></script>
|
||||
<script src="{% static 'fellchensammlung/js/toggles.js' %}"></script>
|
||||
<script src="{% static 'fellchensammlung/js/jquery.min.js' %}"></script>
|
||||
<script type="module" src="{% static 'fellchensammlung/js/photoswipe.js' %}"></script>
|
||||
{% block additional_scrips %}{% endblock %}
|
||||
|
||||
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{% static 'fellchensammlung/favicon/apple-touch-icon.png' %}">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{% static 'fellchensammlung/favicon/favicon-32x32.png' %}">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{% static 'fellchensammlung/favicon/favicon-16x16.png' %}">
|
||||
{% get_oxitraffic_script_if_enabled %}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="">
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -0,0 +1,10 @@
|
||||
{% extends "fellchensammlung/embeddables/embedding-base.html" %}
|
||||
{% load custom_tags %}
|
||||
{% load i18n %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
<div class="block">
|
||||
{% include "fellchensammlung/lists/list-adoption-notices.html" %}
|
||||
</div>
|
||||
{% endblock %}
|
@@ -4,6 +4,7 @@ from .forms import CustomRegistrationForm
|
||||
from .feeds import LatestAdoptionNoticesFeed
|
||||
|
||||
from . import views, registration_views
|
||||
from fellchensammlung.aviews import embeddables
|
||||
from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView
|
||||
|
||||
from django.contrib.sitemaps.views import sitemap
|
||||
@@ -30,7 +31,8 @@ urlpatterns = [
|
||||
# ex: /adoption_notice/7/
|
||||
path("vermittlung/<int:adoption_notice_id>/", views.adoption_notice_detail, name="adoption-notice-detail"),
|
||||
# ex: /adoption_notice/7/sharepic
|
||||
path("vermittlung/<int:adoption_notice_id>/sharepic", views.adoption_notice_sharepic, name="adoption-notice-sharepic"),
|
||||
path("vermittlung/<int:adoption_notice_id>/sharepic", views.adoption_notice_sharepic,
|
||||
name="adoption-notice-sharepic"),
|
||||
# ex: /adoption_notice/7/edit
|
||||
path("vermittlung/<int:adoption_notice_id>/edit", views.adoption_notice_edit, name="adoption-notice-edit"),
|
||||
# ex: /vermittlung/5/add-photo
|
||||
@@ -129,4 +131,8 @@ urlpatterns = [
|
||||
###############
|
||||
path("sitemap.xml", sitemap, {"sitemaps": sitemaps}, name="django.contrib.sitemaps.views.sitemap"),
|
||||
|
||||
###########
|
||||
## EMBED ##
|
||||
|
||||
path('embed/', include('fellchensammlung.aviews.urls')),
|
||||
]
|
||||
|
@@ -764,8 +764,6 @@ def external_site_warning(request, template_name='fellchensammlung/external-site
|
||||
|
||||
def list_rescue_organizations(request, species=None, template='fellchensammlung/animal-shelters.html'):
|
||||
if species is None:
|
||||
# rescue_organizations = RescueOrganization.objects.all()
|
||||
|
||||
org_search = RescueOrgSearch(request)
|
||||
rescue_organizations = org_search.get_rescue_orgs()
|
||||
else:
|
||||
|
Reference in New Issue
Block a user