Add a Wagtail search page

It doesn't do any searching, yet
This commit is contained in:
Jake Howard 2022-07-26 08:53:49 +01:00
parent 0601ced3f5
commit b92f2f4043
Signed by: jake
GPG Key ID: 57AFB45680EDD477
7 changed files with 1012 additions and 79 deletions

View File

@ -0,0 +1,979 @@
# Generated by Django 4.0.5 on 2022-07-26 07:38
import django.db.models.deletion
import wagtail.blocks
import wagtail.embeds.blocks
import wagtail.fields
import wagtail.images.blocks
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
("wagtailcore", "0069_log_entry_jsonfield"),
("unsplash", "0002_unsplashphoto_created_and_more"),
("images", "0001_initial"),
]
operations = [
migrations.CreateModel(
name="SearchPage",
fields=[
(
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
("subtitle", models.CharField(blank=True, max_length=255)),
(
"body",
wagtail.fields.StreamField(
[
("embed", wagtail.embeds.blocks.EmbedBlock()),
(
"rich_text",
wagtail.blocks.RichTextBlock(
features=[
"h2",
"h3",
"h4",
"h5",
"h6",
"bold",
"italic",
"ol",
"ul",
"link",
"document-link",
"code",
"strikethrough",
"snippet-link",
"snippet-embed",
]
),
),
(
"lorem",
wagtail.blocks.StructBlock(
[
(
"paragraphs",
wagtail.blocks.IntegerBlock(min_value=1),
)
]
),
),
("html", wagtail.blocks.RawHTMLBlock()),
(
"image",
wagtail.blocks.StructBlock(
[
(
"image",
wagtail.images.blocks.ImageChooserBlock(),
),
(
"caption",
wagtail.blocks.RichTextBlock(
features=[
"bold",
"italic",
"link",
"document-link",
"code",
"strikethrough",
"snippet-link",
]
),
),
]
),
),
(
"code",
wagtail.blocks.StructBlock(
[
(
"language",
wagtail.blocks.ChoiceBlock(
choices=[
("ABAP", "ABAP"),
("ABNF", "ABNF"),
("ADL", "ADL"),
("AMDGPU", "AMDGPU"),
(
"ANSYS parametric design language",
"ANSYS parametric design language",
),
("ANTLR", "ANTLR"),
(
"ANTLR With ActionScript Target",
"ANTLR With ActionScript Target",
),
(
"ANTLR With C# Target",
"ANTLR With C# Target",
),
(
"ANTLR With CPP Target",
"ANTLR With CPP Target",
),
(
"ANTLR With Java Target",
"ANTLR With Java Target",
),
(
"ANTLR With ObjectiveC Target",
"ANTLR With ObjectiveC Target",
),
(
"ANTLR With Perl Target",
"ANTLR With Perl Target",
),
(
"ANTLR With Python Target",
"ANTLR With Python Target",
),
(
"ANTLR With Ruby Target",
"ANTLR With Ruby Target",
),
("APL", "APL"),
("ASCII armored", "ASCII armored"),
("ActionScript", "ActionScript"),
(
"ActionScript 3",
"ActionScript 3",
),
("Ada", "Ada"),
("Agda", "Agda"),
("Aheui", "Aheui"),
("Alloy", "Alloy"),
("AmbientTalk", "AmbientTalk"),
("Ampl", "Ampl"),
("Angular2", "Angular2"),
("ApacheConf", "ApacheConf"),
("AppleScript", "AppleScript"),
("Arduino", "Arduino"),
("Arrow", "Arrow"),
("AspectJ", "AspectJ"),
("Asymptote", "Asymptote"),
("Augeas", "Augeas"),
("AutoIt", "AutoIt"),
("Awk", "Awk"),
("BARE", "BARE"),
("BBC Basic", "BBC Basic"),
("BBCode", "BBCode"),
("BC", "BC"),
("BNF", "BNF"),
("BST", "BST"),
("BUGS", "BUGS"),
("Base Makefile", "Base Makefile"),
("Bash", "Bash"),
("Bash Session", "Bash Session"),
("Batchfile", "Batchfile"),
("Bdd", "Bdd"),
("Befunge", "Befunge"),
("Berry", "Berry"),
("BibTeX", "BibTeX"),
("BlitzBasic", "BlitzBasic"),
("BlitzMax", "BlitzMax"),
("Boa", "Boa"),
("Boo", "Boo"),
("Boogie", "Boogie"),
("Brainfuck", "Brainfuck"),
("C", "C"),
("C#", "C#"),
("C++", "C++"),
("CAmkES", "CAmkES"),
("CBM BASIC V2", "CBM BASIC V2"),
("CDDL", "CDDL"),
("CFEngine3", "CFEngine3"),
("CMake", "CMake"),
("COBOL", "COBOL"),
("COBOLFree", "COBOLFree"),
("CPSA", "CPSA"),
("CSS", "CSS"),
(
"CSS+Django/Jinja",
"CSS+Django/Jinja",
),
(
"CSS+Genshi Text",
"CSS+Genshi Text",
),
("CSS+Lasso", "CSS+Lasso"),
("CSS+Mako", "CSS+Mako"),
("CSS+Myghty", "CSS+Myghty"),
("CSS+PHP", "CSS+PHP"),
("CSS+Ruby", "CSS+Ruby"),
("CSS+Smarty", "CSS+Smarty"),
("CSS+UL4", "CSS+UL4"),
(
"CSS+mozpreproc",
"CSS+mozpreproc",
),
("CUDA", "CUDA"),
("Cap'n Proto", "Cap'n Proto"),
("CapDL", "CapDL"),
("Ceylon", "Ceylon"),
("ChaiScript", "ChaiScript"),
("Chapel", "Chapel"),
("Charmci", "Charmci"),
("Cheetah", "Cheetah"),
("Cirru", "Cirru"),
("Clay", "Clay"),
("Clean", "Clean"),
("Clojure", "Clojure"),
("ClojureScript", "ClojureScript"),
("CoffeeScript", "CoffeeScript"),
(
"Coldfusion CFC",
"Coldfusion CFC",
),
(
"Coldfusion HTML",
"Coldfusion HTML",
),
("Common Lisp", "Common Lisp"),
(
"Component Pascal",
"Component Pascal",
),
("Coq", "Coq"),
("Crmsh", "Crmsh"),
("Croc", "Croc"),
("Cryptol", "Cryptol"),
("Crystal", "Crystal"),
(
"Csound Document",
"Csound Document",
),
(
"Csound Orchestra",
"Csound Orchestra",
),
("Csound Score", "Csound Score"),
("Cypher", "Cypher"),
("Cython", "Cython"),
("D", "D"),
("DASM16", "DASM16"),
("DTD", "DTD"),
("Darcs Patch", "Darcs Patch"),
("Dart", "Dart"),
(
"Debian Control file",
"Debian Control file",
),
(
"Debian Sourcelist",
"Debian Sourcelist",
),
("Delphi", "Delphi"),
("Devicetree", "Devicetree"),
("Diff", "Diff"),
("Django/Jinja", "Django/Jinja"),
("Docker", "Docker"),
("Duel", "Duel"),
("Dylan", "Dylan"),
("Dylan session", "Dylan session"),
("DylanLID", "DylanLID"),
("E-mail", "E-mail"),
("EBNF", "EBNF"),
("ECL", "ECL"),
("ERB", "ERB"),
("Earl Grey", "Earl Grey"),
("Easytrieve", "Easytrieve"),
("Eiffel", "Eiffel"),
("Elixir", "Elixir"),
(
"Elixir iex session",
"Elixir iex session",
),
("Elm", "Elm"),
("Elpi", "Elpi"),
("EmacsLisp", "EmacsLisp"),
(
"Embedded Ragel",
"Embedded Ragel",
),
("Erlang", "Erlang"),
(
"Erlang erl session",
"Erlang erl session",
),
("Evoque", "Evoque"),
("Ezhil", "Ezhil"),
("F#", "F#"),
("FStar", "FStar"),
("Factor", "Factor"),
("Fancy", "Fancy"),
("Fantom", "Fantom"),
("Felix", "Felix"),
("Fennel", "Fennel"),
("Fish", "Fish"),
("Flatline", "Flatline"),
("FloScript", "FloScript"),
("Forth", "Forth"),
("Fortran", "Fortran"),
("FortranFixed", "FortranFixed"),
("FoxPro", "FoxPro"),
("Freefem", "Freefem"),
("Futhark", "Futhark"),
("GAP", "GAP"),
("GAS", "GAS"),
("GDScript", "GDScript"),
("GLSL", "GLSL"),
("GSQL", "GSQL"),
("Genshi", "Genshi"),
("Genshi Text", "Genshi Text"),
(
"Gettext Catalog",
"Gettext Catalog",
),
("Gherkin", "Gherkin"),
("Gnuplot", "Gnuplot"),
("Go", "Go"),
("Golo", "Golo"),
("GoodData-CL", "GoodData-CL"),
("Gosu", "Gosu"),
("Gosu Template", "Gosu Template"),
("Graphviz", "Graphviz"),
("Groff", "Groff"),
("Groovy", "Groovy"),
("HLSL", "HLSL"),
("HSAIL", "HSAIL"),
("HTML", "HTML"),
(
"HTML + Angular2",
"HTML + Angular2",
),
("HTML+Cheetah", "HTML+Cheetah"),
(
"HTML+Django/Jinja",
"HTML+Django/Jinja",
),
("HTML+Evoque", "HTML+Evoque"),
("HTML+Genshi", "HTML+Genshi"),
(
"HTML+Handlebars",
"HTML+Handlebars",
),
("HTML+Lasso", "HTML+Lasso"),
("HTML+Mako", "HTML+Mako"),
("HTML+Myghty", "HTML+Myghty"),
("HTML+PHP", "HTML+PHP"),
("HTML+Smarty", "HTML+Smarty"),
("HTML+Twig", "HTML+Twig"),
("HTML+UL4", "HTML+UL4"),
("HTML+Velocity", "HTML+Velocity"),
("HTTP", "HTTP"),
("Haml", "Haml"),
("Handlebars", "Handlebars"),
("Haskell", "Haskell"),
("Haxe", "Haxe"),
("Hexdump", "Hexdump"),
("Hspec", "Hspec"),
("Hxml", "Hxml"),
("Hy", "Hy"),
("Hybris", "Hybris"),
("IDL", "IDL"),
("INI", "INI"),
("IRC logs", "IRC logs"),
("Icon", "Icon"),
("Idris", "Idris"),
("Igor", "Igor"),
("Inform 6", "Inform 6"),
(
"Inform 6 template",
"Inform 6 template",
),
("Inform 7", "Inform 7"),
("Io", "Io"),
("Ioke", "Ioke"),
("Isabelle", "Isabelle"),
("J", "J"),
("JAGS", "JAGS"),
("JCL", "JCL"),
("JSGF", "JSGF"),
("JSLT", "JSLT"),
("JSON", "JSON"),
("JSON-LD", "JSON-LD"),
(
"JSONBareObject",
"JSONBareObject",
),
("Jasmin", "Jasmin"),
("Java", "Java"),
(
"Java Server Page",
"Java Server Page",
),
("JavaScript", "JavaScript"),
(
"JavaScript+Cheetah",
"JavaScript+Cheetah",
),
(
"JavaScript+Django/Jinja",
"JavaScript+Django/Jinja",
),
(
"JavaScript+Genshi Text",
"JavaScript+Genshi Text",
),
(
"JavaScript+Lasso",
"JavaScript+Lasso",
),
(
"JavaScript+Mako",
"JavaScript+Mako",
),
(
"JavaScript+Myghty",
"JavaScript+Myghty",
),
(
"JavaScript+PHP",
"JavaScript+PHP",
),
(
"JavaScript+Ruby",
"JavaScript+Ruby",
),
(
"JavaScript+Smarty",
"JavaScript+Smarty",
),
(
"Javascript+UL4",
"Javascript+UL4",
),
(
"Javascript+mozpreproc",
"Javascript+mozpreproc",
),
("Julia", "Julia"),
("Julia console", "Julia console"),
("Juttle", "Juttle"),
("K", "K"),
("Kal", "Kal"),
("Kconfig", "Kconfig"),
("Kernel log", "Kernel log"),
("Koka", "Koka"),
("Kotlin", "Kotlin"),
("Kuin", "Kuin"),
("LLVM", "LLVM"),
("LLVM-MIR", "LLVM-MIR"),
("LLVM-MIR Body", "LLVM-MIR Body"),
("LSL", "LSL"),
("Lasso", "Lasso"),
("Lean", "Lean"),
("LessCss", "LessCss"),
(
"Lighttpd configuration file",
"Lighttpd configuration file",
),
("LilyPond", "LilyPond"),
("Limbo", "Limbo"),
("Literate Agda", "Literate Agda"),
(
"Literate Cryptol",
"Literate Cryptol",
),
(
"Literate Haskell",
"Literate Haskell",
),
(
"Literate Idris",
"Literate Idris",
),
("LiveScript", "LiveScript"),
("Logos", "Logos"),
("Logtalk", "Logtalk"),
("Lua", "Lua"),
("MAQL", "MAQL"),
("MCFunction", "MCFunction"),
("MIME", "MIME"),
("MOOCode", "MOOCode"),
("MQL", "MQL"),
("MSDOS Session", "MSDOS Session"),
("MXML", "MXML"),
("Macaulay2", "Macaulay2"),
("Makefile", "Makefile"),
("Mako", "Mako"),
("Markdown", "Markdown"),
("Mask", "Mask"),
("Mason", "Mason"),
("Mathematica", "Mathematica"),
("Matlab", "Matlab"),
(
"Matlab session",
"Matlab session",
),
("Maxima", "Maxima"),
("Meson", "Meson"),
("MiniD", "MiniD"),
("MiniScript", "MiniScript"),
("Modelica", "Modelica"),
("Modula-2", "Modula-2"),
(
"MoinMoin/Trac Wiki markup",
"MoinMoin/Trac Wiki markup",
),
("Monkey", "Monkey"),
("Monte", "Monte"),
("MoonScript", "MoonScript"),
("Mosel", "Mosel"),
("Mscgen", "Mscgen"),
("MuPAD", "MuPAD"),
("MySQL", "MySQL"),
("Myghty", "Myghty"),
("NASM", "NASM"),
("NCL", "NCL"),
("NSIS", "NSIS"),
("Nemerle", "Nemerle"),
("NestedText", "NestedText"),
("NewLisp", "NewLisp"),
("Newspeak", "Newspeak"),
(
"Nginx configuration file",
"Nginx configuration file",
),
("Nimrod", "Nimrod"),
("Nit", "Nit"),
("Nix", "Nix"),
(
"Node.js REPL console session",
"Node.js REPL console session",
),
("Notmuch", "Notmuch"),
("NuSMV", "NuSMV"),
("NumPy", "NumPy"),
("OCaml", "OCaml"),
("ODIN", "ODIN"),
(
"OMG Interface Definition Language",
"OMG Interface Definition Language",
),
("Objective-C", "Objective-C"),
("Objective-C++", "Objective-C++"),
("Objective-J", "Objective-J"),
("Octave", "Octave"),
("Ooc", "Ooc"),
("Opa", "Opa"),
("OpenEdge ABL", "OpenEdge ABL"),
("PEG", "PEG"),
("PHP", "PHP"),
("PL/pgSQL", "PL/pgSQL"),
("POVRay", "POVRay"),
("PacmanConf", "PacmanConf"),
("Pan", "Pan"),
("ParaSail", "ParaSail"),
("Pawn", "Pawn"),
("Perl", "Perl"),
("Perl6", "Perl6"),
("Pig", "Pig"),
("Pike", "Pike"),
("PkgConfig", "PkgConfig"),
("Pointless", "Pointless"),
("Pony", "Pony"),
("PostScript", "PostScript"),
(
"PostgreSQL SQL dialect",
"PostgreSQL SQL dialect",
),
(
"PostgreSQL console (psql)",
"PostgreSQL console (psql)",
),
("PowerShell", "PowerShell"),
(
"PowerShell Session",
"PowerShell Session",
),
("Praat", "Praat"),
("Procfile", "Procfile"),
("Prolog", "Prolog"),
("PromQL", "PromQL"),
("Properties", "Properties"),
(
"Protocol Buffer",
"Protocol Buffer",
),
(
"PsySH console session for PHP",
"PsySH console session for PHP",
),
("Pug", "Pug"),
("Puppet", "Puppet"),
("PyPy Log", "PyPy Log"),
("Python", "Python"),
("Python 2.x", "Python 2.x"),
(
"Python 2.x Traceback",
"Python 2.x Traceback",
),
(
"Python Traceback",
"Python Traceback",
),
(
"Python console session",
"Python console session",
),
("Python+UL4", "Python+UL4"),
("Q", "Q"),
("QBasic", "QBasic"),
("QML", "QML"),
("QVTO", "QVTO"),
("Qlik", "Qlik"),
("RConsole", "RConsole"),
("REBOL", "REBOL"),
("RHTML", "RHTML"),
("RPMSpec", "RPMSpec"),
("RQL", "RQL"),
("RSL", "RSL"),
("Racket", "Racket"),
("Ragel", "Ragel"),
(
"Ragel in C Host",
"Ragel in C Host",
),
(
"Ragel in CPP Host",
"Ragel in CPP Host",
),
(
"Ragel in D Host",
"Ragel in D Host",
),
(
"Ragel in Java Host",
"Ragel in Java Host",
),
(
"Ragel in Objective C Host",
"Ragel in Objective C Host",
),
(
"Ragel in Ruby Host",
"Ragel in Ruby Host",
),
(
"Raw token data",
"Raw token data",
),
("Rd", "Rd"),
("ReasonML", "ReasonML"),
("Red", "Red"),
("Redcode", "Redcode"),
(
"Relax-NG Compact",
"Relax-NG Compact",
),
(
"ResourceBundle",
"ResourceBundle",
),
("Rexx", "Rexx"),
("Ride", "Ride"),
("Rita", "Rita"),
(
"Roboconf Graph",
"Roboconf Graph",
),
(
"Roboconf Instances",
"Roboconf Instances",
),
(
"RobotFramework",
"RobotFramework",
),
("Ruby", "Ruby"),
(
"Ruby irb session",
"Ruby irb session",
),
("Rust", "Rust"),
("S", "S"),
("SARL", "SARL"),
("SAS", "SAS"),
("SCSS", "SCSS"),
("SNBT", "SNBT"),
("SPARQL", "SPARQL"),
("SQL", "SQL"),
("SWIG", "SWIG"),
("Sass", "Sass"),
("Savi", "Savi"),
("Scala", "Scala"),
(
"Scalate Server Page",
"Scalate Server Page",
),
("Scaml", "Scaml"),
("Scheme", "Scheme"),
("Scilab", "Scilab"),
("Sed", "Sed"),
("ShExC", "ShExC"),
("Shen", "Shen"),
("Sieve", "Sieve"),
("Silver", "Silver"),
("Singularity", "Singularity"),
("Slash", "Slash"),
("Slim", "Slim"),
("Slurm", "Slurm"),
("Smali", "Smali"),
("Smalltalk", "Smalltalk"),
(
"SmartGameFormat",
"SmartGameFormat",
),
("Smarty", "Smarty"),
("Smithy", "Smithy"),
("Snobol", "Snobol"),
("Snowball", "Snowball"),
("Solidity", "Solidity"),
("Sophia", "Sophia"),
("SourcePawn", "SourcePawn"),
("Spice", "Spice"),
("SquidConf", "SquidConf"),
("Srcinfo", "Srcinfo"),
("Stan", "Stan"),
("Standard ML", "Standard ML"),
("Stata", "Stata"),
("SuperCollider", "SuperCollider"),
("Swift", "Swift"),
("TADS 3", "TADS 3"),
("TAP", "TAP"),
("TASM", "TASM"),
("TOML", "TOML"),
("Tal", "Tal"),
("Tcl", "Tcl"),
("Tcsh", "Tcsh"),
("Tcsh Session", "Tcsh Session"),
("TeX", "TeX"),
("Tea", "Tea"),
(
"Tera Term macro",
"Tera Term macro",
),
("Termcap", "Termcap"),
("Terminfo", "Terminfo"),
("Terraform", "Terraform"),
("Text only", "Text only"),
("Text output", "Text output"),
("ThingsDB", "ThingsDB"),
("Thrift", "Thrift"),
("Todotxt", "Todotxt"),
("TrafficScript", "TrafficScript"),
("Transact-SQL", "Transact-SQL"),
("Treetop", "Treetop"),
("Turtle", "Turtle"),
("Twig", "Twig"),
("TypeScript", "TypeScript"),
("TypoScript", "TypoScript"),
(
"TypoScriptCssData",
"TypoScriptCssData",
),
(
"TypoScriptHtmlData",
"TypoScriptHtmlData",
),
(
"Typographic Number Theory",
"Typographic Number Theory",
),
("UL4", "UL4"),
("USD", "USD"),
("Unicon", "Unicon"),
(
"Unix/Linux config files",
"Unix/Linux config files",
),
("UrbiScript", "UrbiScript"),
("VB.net", "VB.net"),
("VBScript", "VBScript"),
("VCL", "VCL"),
("VCLSnippets", "VCLSnippets"),
("VCTreeStatus", "VCTreeStatus"),
("VGL", "VGL"),
("Vala", "Vala"),
("Velocity", "Velocity"),
("VimL", "VimL"),
("WDiff", "WDiff"),
("Web IDL", "Web IDL"),
("WebAssembly", "WebAssembly"),
("Whiley", "Whiley"),
("X10", "X10"),
("XML", "XML"),
("XML+Cheetah", "XML+Cheetah"),
(
"XML+Django/Jinja",
"XML+Django/Jinja",
),
("XML+Evoque", "XML+Evoque"),
("XML+Lasso", "XML+Lasso"),
("XML+Mako", "XML+Mako"),
("XML+Myghty", "XML+Myghty"),
("XML+PHP", "XML+PHP"),
("XML+Ruby", "XML+Ruby"),
("XML+Smarty", "XML+Smarty"),
("XML+UL4", "XML+UL4"),
("XML+Velocity", "XML+Velocity"),
("XQuery", "XQuery"),
("XSLT", "XSLT"),
(
"XUL+mozpreproc",
"XUL+mozpreproc",
),
("Xorg", "Xorg"),
("Xtend", "Xtend"),
("YAML", "YAML"),
("YAML+Jinja", "YAML+Jinja"),
("YANG", "YANG"),
("Zeek", "Zeek"),
("Zephir", "Zephir"),
("Zig", "Zig"),
("aspx-cs", "aspx-cs"),
("aspx-vb", "aspx-vb"),
("autohotkey", "autohotkey"),
("c-objdump", "c-objdump"),
("cADL", "cADL"),
(
"ca65 assembler",
"ca65 assembler",
),
("cfstatement", "cfstatement"),
("cplint", "cplint"),
("cpp-objdump", "cpp-objdump"),
("d-objdump", "d-objdump"),
("dg", "dg"),
("eC", "eC"),
("execline", "execline"),
("g-code", "g-code"),
("liquid", "liquid"),
(
"mozhashpreproc",
"mozhashpreproc",
),
(
"mozpercentpreproc",
"mozpercentpreproc",
),
("nesC", "nesC"),
("objdump", "objdump"),
("objdump-nasm", "objdump-nasm"),
(
"reStructuredText",
"reStructuredText",
),
("reg", "reg"),
("scdoc", "scdoc"),
("sqlite3con", "sqlite3con"),
("systemverilog", "systemverilog"),
("teal", "teal"),
("tiddler", "tiddler"),
("ucode", "ucode"),
("verilog", "verilog"),
("vhdl", "vhdl"),
("xtlang", "xtlang"),
]
),
),
("source", wagtail.blocks.TextBlock()),
]
),
),
(
"tangent",
wagtail.blocks.StructBlock(
[
(
"name",
wagtail.blocks.CharBlock(max_length=64),
),
(
"content",
wagtail.blocks.RichTextBlock(
features=[
"bold",
"italic",
"ol",
"ul",
"link",
"document-link",
"code",
"strikethrough",
"snippet-link",
]
),
),
]
),
),
(
"mermaid",
wagtail.blocks.StructBlock(
[
("source", wagtail.blocks.TextBlock()),
(
"caption",
wagtail.blocks.RichTextBlock(
features=[
"bold",
"italic",
"link",
"document-link",
"code",
"strikethrough",
"snippet-link",
]
),
),
]
),
),
],
blank=True,
use_json_field=True,
),
),
(
"hero_image",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="images.customimage",
),
),
(
"hero_unsplash_photo",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="unsplash.unsplashphoto",
),
),
],
options={
"abstract": False,
},
bases=("wagtailcore.page", models.Model),
),
]

View File

22
website/search/models.py Normal file
View File

@ -0,0 +1,22 @@
from django.utils.functional import cached_property
from website.common.models import BaseContentMixin, BasePage
from website.common.utils import TocEntry
class SearchPage(BaseContentMixin, BasePage): # type: ignore[misc]
max_count = 1
subpage_types: list = []
parent_page_types = ["home.HomePage"]
content_panels = BasePage.content_panels + BaseContentMixin.content_panels
@cached_property
def reading_time(self) -> int:
"""
How does one read a search page?
"""
return 0
@cached_property
def table_of_contents(self) -> list[TocEntry]:
return []

View File

@ -1,38 +0,0 @@
{% extends "base.html" %}
{% load static wagtailcore_tags %}
{% block body_class %}template-searchresults{% endblock %}
{% block title %}Search{% endblock %}
{% block content %}
<h1>Search</h1>
<form action="{% url 'search' %}" method="get">
<input type="text" name="query"{% if search_query %} value="{{ search_query }}"{% endif %}>
<input type="submit" value="Search" class="button">
</form>
{% if search_results %}
<ul>
{% for result in search_results %}
<li>
<h4><a href="{% pageurl result %}">{{ result }}</a></h4>
{% if result.search_description %}
{{ result.search_description }}
{% endif %}
</li>
{% endfor %}
</ul>
{% if search_results.has_previous %}
<a href="{% url 'search' %}?query={{ search_query|urlencode }}&amp;page={{ search_results.previous_page_number }}">Previous</a>
{% endif %}
{% if search_results.has_next %}
<a href="{% url 'search' %}?query={{ search_query|urlencode }}&amp;page={{ search_results.next_page_number }}">Next</a>
{% endif %}
{% elif search_query %}
No results found
{% endif %}
{% endblock %}

View File

@ -0,0 +1,11 @@
{% extends "wagtail_base.html" %}
{% block content %}
{% include "common/hero.html" %}
<section class="container content">
{{ page.body_html|safe }}
</section>
{% endblock %}

View File

@ -1,38 +0,0 @@
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
from django.http.request import HttpRequest
from django.template.response import TemplateResponse
from wagtail.models import Page
from wagtail.search.models import Query
def search(request: HttpRequest) -> TemplateResponse:
search_query = request.GET.get("query", None)
page = request.GET.get("page", 1)
# Search
if search_query:
search_results = Page.objects.live().search(search_query)
query = Query.get(search_query)
# Record hit
query.add_hit()
else:
search_results = Page.objects.none()
# Pagination
paginator = Paginator(search_results, 10)
try:
search_results = paginator.page(page)
except PageNotAnInteger:
search_results = paginator.page(1)
except EmptyPage:
search_results = paginator.page(paginator.num_pages)
return TemplateResponse(
request,
"search/search.html",
{
"search_query": search_query,
"search_results": search_results,
},
)

View File

@ -6,13 +6,10 @@ from wagtail.admin import urls as wagtailadmin_urls
from wagtail.documents import urls as wagtaildocs_urls
from wagtail.images.views.serve import ServeView
from website.search import views as search_views
urlpatterns = [
path("django-admin/", admin.site.urls),
path("admin/", include(wagtailadmin_urls)),
path("documents/", include(wagtaildocs_urls)),
path("search/", search_views.search, name="search"),
path(
"code-block/",
include("website.contrib.code_block.urls"),