Add header

This commit is contained in:
Warren Chen 2025-10-16 15:29:55 +09:00
parent b97fed5340
commit 0874255859
11 changed files with 130 additions and 3 deletions

View File

@ -0,0 +1,28 @@
# Generated by Django 5.2.7 on 2025-10-16 04:59
import django.db.models.deletion
import wagtail.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0004_alter_navigationsettings_options_and_more'),
('wagtailimages', '0027_image_description'),
]
operations = [
migrations.CreateModel(
name='HeaderSettring',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('site_name', models.CharField(blank=True, max_length=255)),
('extra_links', wagtail.fields.StreamField([('link', 2)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {}), 1: ('wagtail.blocks.URLBlock', (), {}), 2: ('wagtail.blocks.StructBlock', [[('label', 0), ('url', 1)]], {})}, null=True)),
('logo', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image')),
],
options={
'verbose_name': 'Header Settings',
},
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 5.2.7 on 2025-10-16 05:11
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('base', '0005_headersettring'),
('wagtailimages', '0027_image_description'),
]
operations = [
migrations.RenameModel(
old_name='HeaderSettring',
new_name='HeaderSettrings',
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 5.2.7 on 2025-10-16 05:12
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('base', '0006_rename_headersettring_headersettrings'),
('wagtailimages', '0027_image_description'),
]
operations = [
migrations.RenameModel(
old_name='HeaderSettrings',
new_name='HeaderSettings',
),
]

View File

@ -27,6 +27,37 @@ from wagtail.snippets.models import register_snippet
from wagtail.fields import StreamField from wagtail.fields import StreamField
from wagtail import blocks from wagtail import blocks
@register_setting
class HeaderSettings(BaseGenericSetting):
logo = models.ForeignKey(
"wagtailimages.Image",
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="+",
)
site_name = models.CharField(max_length=255, blank=True)
extra_links = StreamField([
("link", blocks.StructBlock([
("label", blocks.CharBlock()),
("url", blocks.URLBlock())
]))
], use_json_field=True, blank=True, null=True)
panels = [
MultiFieldPanel(
[
FieldPanel("logo"),
FieldPanel("site_name"),
FieldPanel("extra_links"),
],
heading="Header Settings",
),
]
class Meta:
verbose_name = "Header Settings"
@register_setting @register_setting
class NavigationSettings(BaseGenericSetting): class NavigationSettings(BaseGenericSetting):
footer_links = StreamField([ footer_links = StreamField([

View File

@ -3,10 +3,10 @@
import os import os
import sys import sys
# from dotenv import load_dotenv from dotenv import load_dotenv
# env_file = os.environ.get("ENV_FILE", "../.env") env_file = os.environ.get("ENV_FILE", "../.env")
# load_dotenv(env_file) load_dotenv(env_file)
def main(): def main():
"""Run administrative tasks.""" """Run administrative tasks."""

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

View File

@ -34,6 +34,8 @@
<body class="{% block body_class %}{% endblock %}"> <body class="{% block body_class %}{% endblock %}">
{% wagtailuserbar %} {% wagtailuserbar %}
{% include "includes/header.html" %}
{% block content %}{% endblock %} {% block content %}{% endblock %}
{% include "includes/footer.html" %} {% include "includes/footer.html" %}

View File

@ -0,0 +1,30 @@
{% load wagtailsettings_tags wagtailimages_tags %}
{% get_settings use_default_site=True as settings %}
<header class="site-header">
<div class="header-inner">
{% if settings.base.HeaderSettings.logo %}
<a href="/" class="logo">
{% image settings.base.HeaderSettings.logo fill-60x60 %}
{% if settings.base.HeaderSettings.site_name %}
<span class="site-name">{{ settings.base.HeaderSettings.site_name }}</span>
{% endif %}
</a>
{% endif %}
<nav class="main-nav">
<ul>
{%with page.get_site.root_page as root %}
{% for page in root.get_descendants.live.in_menu %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
{% endwith %}
{% if settings.base.HeaderSettings.main_links %}
{% for item in settings.base.HeaderSettings.main_links %}
<li><a href="{{ item.value.url }}">{{ item.value.label }}</a></li>
{% endfor %}
{% endif %}
</ul>
</nav>
</div>
</header>