All files for deployment ready and tested - further development in this repo.
This commit is contained in:
32
pages/templates/base.html
Normal file
32
pages/templates/base.html
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>{% block title %}{% endblock %}</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
{% load static %}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<a class="navbar-brand" href="#">Vorgaben</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
|
||||
<div class="navbar-nav">
|
||||
<a class="nav-item nav-link active" href="/standards">Standards</a>
|
||||
<a class="nav-item nav-link" href="/referenzen">Referenzen</a>
|
||||
<a class="nav-item nav-link" href="/stichworte">Stichworte</a>
|
||||
<a class="nav-item nav-link" href="/search">Suche</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="d-flex">
|
||||
<div class="col-md-2">{% block sidebar_left %}{% endblock %}</div>
|
||||
<div class="flex-fill">{% block content %}Main Content{% endblock %}</div>
|
||||
<div class="col-md-2">{% block sidebar_right %}{% endblock %}</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
41
pages/templates/results.html
Normal file
41
pages/templates/results.html
Normal file
@@ -0,0 +1,41 @@
|
||||
{% extends "base.html" %}
|
||||
{% load page_extras %}
|
||||
{% block content %}
|
||||
<h1 class="mb-4">Suchresultate für {{ suchbegriff }}</h1>
|
||||
{% if resultat.geltungsbereich %}
|
||||
<h2>Standards mit "{{suchbegriff}}" im Geltungsbereich</h2>
|
||||
{% for standard,geltungsbereich in resultat.geltungsbereich.items %}
|
||||
<h4>{{ standard }}</h4>
|
||||
{% for typ, html in geltungsbereich %}
|
||||
<div>{{ html|highlighttext:suchbegriff|safe }}</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if resultat.kurztext %}
|
||||
<h2>Vorgaben mit "{{ suchbegriff }}" im Kurztext</h2>
|
||||
{% for standard, vorgaben in resultat.kurztext.items %}
|
||||
<h4>{{ standard }}</h4>
|
||||
<ul>
|
||||
{% for vorgabe in vorgaben %}
|
||||
<li><a href="{% url 'standard_detail' nummer=vorgabe.dokument.nummer %}#{{vorgabe.Vorgabennummer}}">{{vorgabe}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if resultat.langtext %}
|
||||
<h2>Vorgaben mit "{{ suchbegriff }}" im Langtext</h2>
|
||||
{% for standard, vorgaben in resultat.langtext.items %}
|
||||
<h4>{{ standard }}</h4>
|
||||
<ul>
|
||||
{% for vorgabe in vorgaben %}
|
||||
<li><a href="{% url 'standard_detail' nummer=vorgabe.dokument.nummer %}#{{vorgabe.Vorgabennummer}}">{{vorgabe}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if not resultat.langtext and not resultat.kurztext and not resultat.geltungsbereich %}
|
||||
<h2>Keine Resultate für "{{suchbegriff}}"</h2>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
41
pages/templates/search.html
Normal file
41
pages/templates/search.html
Normal file
@@ -0,0 +1,41 @@
|
||||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<h1 class="mb-4">Suche</h1>
|
||||
|
||||
<!-- Search form -->
|
||||
<form action="." method="post">
|
||||
{% csrf_token %}
|
||||
<!-- Search field -->
|
||||
<div class="mb-3">
|
||||
<label for="query" class="form-label">Suchbegriff</label>
|
||||
<input type="text"
|
||||
class="form-control"
|
||||
id="query"
|
||||
name="q"
|
||||
placeholder="Suchbegriff eingeben …"
|
||||
required>
|
||||
</div>
|
||||
|
||||
<!-- Check-box group -->
|
||||
<fieldset class="mb-4">
|
||||
<legend class="h6 mb-2">In folgenden Bereichen suchen:</legend>
|
||||
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" value="kurztext" id="kurztext" name="suchbereich[]" checked>
|
||||
<label class="form-check-label" for="kurztext">Kurztext</label>
|
||||
</div>
|
||||
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" value="langtext" id="langtext" name="suchbereich[]" checked>
|
||||
<label class="form-check-label" for="langtext">Langtext</label>
|
||||
</div>
|
||||
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" value="geltungsbereich" id="geltungsbereich" name="suchbereich[]">
|
||||
<label class="form-check-label" for="geltungsbereich">Geltungsbereich</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<button type="submit" class="btn btn-primary">Suchen</button>
|
||||
</form>
|
||||
{% endblock %}
|
||||
10
pages/templates/startseite.html
Normal file
10
pages/templates/startseite.html
Normal file
@@ -0,0 +1,10 @@
|
||||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<h1>Vorgaben Informatiksicherheit BIT</h1>
|
||||
<h2>Standards</h2>
|
||||
<ul>
|
||||
{% for standard in standards %}
|
||||
<li>{{ standard }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endblock %}
|
||||
11
pages/templatetags/page_extras.py
Normal file
11
pages/templatetags/page_extras.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from django import template
|
||||
from django.template.defaultfilters import stringfilter
|
||||
|
||||
register=template.Library()
|
||||
|
||||
@register.filter(name="highlighttext", is_safe=True)
|
||||
@stringfilter
|
||||
def highlighttext(text,target):
|
||||
print ("Doing stuff")
|
||||
return text.replace(target,'<span style="color: #AA0000; bg-color: AAAA00;">%s</span>'%target)
|
||||
|
||||
34
pages/views.py
Normal file
34
pages/views.py
Normal file
@@ -0,0 +1,34 @@
|
||||
from django.shortcuts import render
|
||||
from abschnitte.utils import render_textabschnitte
|
||||
from standards.models import Standard, VorgabeLangtext, VorgabeKurztext, Geltungsbereich
|
||||
from itertools import groupby
|
||||
import datetime
|
||||
|
||||
def startseite(request):
|
||||
standards=list(Standard.objects.all())
|
||||
return render(request, 'startseite.html', {"standards":standards,})
|
||||
|
||||
def search(request):
|
||||
if request.method == "GET":
|
||||
return render(request, 'search.html')
|
||||
elif request.method == "POST":
|
||||
suchbegriff=request.POST.get("q")
|
||||
areas=request.POST.getlist("suchbereich[]")
|
||||
result= {}
|
||||
geltungsbereich=set()
|
||||
if "kurztext" in areas:
|
||||
qs = VorgabeKurztext.objects.filter(inhalt__contains=suchbegriff).exclude(abschnitt__gueltigkeit_bis__lt=datetime.date.today())
|
||||
result["kurztext"] = {k: [o.abschnitt for o in g] for k, g in groupby(qs, key=lambda o: o.abschnitt.dokument)}
|
||||
if "langtext" in areas:
|
||||
qs = VorgabeLangtext.objects.filter(inhalt__contains=suchbegriff).exclude(abschnitt__gueltigkeit_bis__lt=datetime.date.today())
|
||||
result['langtext']= {k: [o.abschnitt for o in g] for k, g in groupby(qs, key=lambda o: o.abschnitt.dokument)}
|
||||
if "geltungsbereich" in areas:
|
||||
result["geltungsbereich"]={}
|
||||
geltungsbereich=set(list([x.geltungsbereich for x in Geltungsbereich.objects.filter(inhalt__contains=suchbegriff)]))
|
||||
for s in geltungsbereich:
|
||||
result["geltungsbereich"][s]=render_textabschnitte(s.geltungsbereich_set.order_by("order"))
|
||||
for r in result.keys():
|
||||
for s in result[r].keys():
|
||||
result[r][s]=set(result[r][s])
|
||||
return render(request,"results.html",{"suchbegriff":suchbegriff,"resultat":result})
|
||||
|
||||
Reference in New Issue
Block a user