Browse Source

zkouska

uzfunguj
Patolán 5 years ago
parent
commit
d097845ca7
  1. 1
      .gitignore
  2. 4
      blog/settings/base.py
  3. 15
      blog/static/css/blog.css
  4. BIN
      blog/static/img/blank-image.jpg
  5. 28
      blog/templates/base.html
  6. 7
      blog/templates/menu.html
  7. 3
      requirements.txt
  8. 0
      stranky/__init__.py
  9. 3
      stranky/admin.py
  10. 5
      stranky/apps.py
  11. 44
      stranky/migrations/0001_initial.py
  12. 0
      stranky/migrations/__init__.py
  13. 35
      stranky/models.py
  14. 20
      stranky/templates/stranky/stranka_page.html
  15. 3
      stranky/tests.py
  16. 3
      stranky/views.py
  17. 6
      zapisnik/migrations/0003_blogpagegalleryimage.py
  18. 5
      zapisnik/models.py
  19. 30
      zapisnik/templates/zapisnik/blog_index_page.html
  20. 2
      zapisnik/templates/zapisnik/blog_page.html

1
.gitignore

@ -129,3 +129,4 @@ dmypy.json
# Pyre type checker
.pyre/
media/

4
blog/settings/base.py

@ -29,6 +29,7 @@ INSTALLED_APPS = [
'wagtail.contrib.forms',
'wagtail.contrib.redirects',
'wagtail.contrib.modeladmin',
'wagtail.embeds',
'wagtail.sites',
'wagtail.users',
@ -49,6 +50,8 @@ INSTALLED_APPS = [
'django.contrib.messages',
'django.contrib.staticfiles',
'zapisnik',
'stranky',
'wagtailmenus',
]
MIDDLEWARE = [
@ -78,6 +81,7 @@ TEMPLATES = [
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'wagtailmenus.context_processors.wagtailmenus',
],
},
},

15
blog/static/css/blog.css

@ -1,16 +1,17 @@
main > .container {
padding: 60px 15px 0;
}
}
.footer {
.footer {
background-color: #f5f5f5;
}
}
.footer > .container {
.footer > .container {
padding-right: 15px;
padding-left: 15px;
}
}
code {
code {
font-size: 80%;
}
}

BIN
blog/static/img/blank-image.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

28
blog/templates/base.html

@ -1,4 +1,4 @@
{% load static wagtailuserbar %}
{% load static wagtailuserbar menu_tags %}
<!DOCTYPE html>
<html class="no-js h-100" lang="en">
@ -15,7 +15,7 @@
{% endblock %}
</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
{# Global stylesheets #}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
@ -26,36 +26,29 @@
{% endblock %}
</head>
<body class="{% block body_class %}{% endblock %}">
{% wagtailuserbar %}
<body class="d-flex flex-column h-100 {% block body_class %}{% endblock %}">
<header>
<!-- Fixed navbar -->
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
<a class="navbar-brand" href="#">Fixed navbar</a>
<a class="navbar-brand" href="/">Můj blog</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse"
aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</li>
</ul>
{% main_menu max_levels=1 template="menu.html" %}
<!--
<form class="form-inline mt-2 mt-md-0">
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
-->
</div>
</nav>
</header>
<!-- Begin page content -->
<main role="main" class="flex-shrink-0">
<div class="container">
{% block content %}{% endblock %}
@ -64,9 +57,10 @@
<footer class="footer mt-auto py-3">
<div class="container">
<span class="text-muted">Place sticky footer content here.</span>
<span class="text-muted">Place sticky footer content here.</span>
</div>
</footer>
{# Global javascript #}
<script type="text/javascript" src="{% static 'js/blog.js' %}"></script>

7
blog/templates/menu.html

@ -0,0 +1,7 @@
<ul class="navbar-nav mr-auto">
{% for item in menu_items %}
<li class="nav-item {{ item.active_class }}">
<a class="nav-link" href="{{ item.href }}">{{ item.text }}</a>
</li>
{% endfor %}
</ul>

3
requirements.txt

@ -1,2 +1,3 @@
Django>=3.1,<3.2
wagtail>=2.10,<2.11
wagtail>=2.10,<2.12
wagtailmenus>=3.0,<3.1

0
stranky/__init__.py

3
stranky/admin.py

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

5
stranky/apps.py

@ -0,0 +1,5 @@
from django.apps import AppConfig
class StrankyConfig(AppConfig):
name = 'stranky'

44
stranky/migrations/0001_initial.py

@ -0,0 +1,44 @@
# Generated by Django 3.1.3 on 2020-11-06 10:18
from django.db import migrations, models
import django.db.models.deletion
import modelcluster.fields
import wagtail.core.fields
class Migration(migrations.Migration):
initial = True
dependencies = [
('wagtailcore', '0059_apply_collection_ordering'),
('wagtailimages', '0022_uploadedimage'),
]
operations = [
migrations.CreateModel(
name='StrankaPage',
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')),
('body', wagtail.core.fields.RichTextField(blank=True)),
],
options={
'abstract': False,
},
bases=('wagtailcore.page',),
),
migrations.CreateModel(
name='StrankaPageGalleryImage',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
('caption', models.CharField(blank=True, max_length=250)),
('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailimages.image')),
('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='gallery_images', to='stranky.strankapage')),
],
options={
'ordering': ['sort_order'],
'abstract': False,
},
),
]

0
stranky/migrations/__init__.py

35
stranky/models.py

@ -0,0 +1,35 @@
from django.db import models
from modelcluster.fields import ParentalKey
from wagtail.core.models import Page, Orderable
from wagtail.core.fields import RichTextField
from wagtail.admin.edit_handlers import FieldPanel, InlinePanel
from wagtail.images.edit_handlers import ImageChooserPanel
from wagtail.search import index
class StrankaPage(Page):
body = RichTextField(blank=True)
search_fields = Page.search_fields + [
index.SearchField('body'),
]
content_panels = Page.content_panels + [
FieldPanel('body', classname="full"),
InlinePanel('gallery_images', label="Obrázky"),
]
class StrankaPageGalleryImage(Orderable):
page = ParentalKey(StrankaPage, on_delete=models.CASCADE, related_name='gallery_images')
image = models.ForeignKey(
'wagtailimages.Image', on_delete=models.CASCADE, related_name='+'
)
caption = models.CharField(blank=True, max_length=250)
panels = [
ImageChooserPanel('image'),
FieldPanel('caption'),
]

20
stranky/templates/stranky/stranka_page.html

@ -0,0 +1,20 @@
{% extends "base.html" %}
{% load wagtailcore_tags wagtailimages_tags %}
{% block body_class %}template-strankapage{% endblock %}
{% block content %}
<h1>{{ page.title }}</h1>
{{ page.body|richtext }}
{% for item in page.gallery_images.all %}
<div style="float: left; margin: 10px">
{% image item.image fill-320x240 %}
<p>{{ item.caption }}</p>
</div>
{% endfor %}
<div style="clear: left"></div>
{% endblock %}

3
stranky/tests.py

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

3
stranky/views.py

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

6
zapisnik/migrations/0003_blogpagegalleryimage.py

@ -1,4 +1,4 @@
# Generated by Django 3.0.6 on 2020-10-23 09:07
# Generated by Django 3.1.2 on 2020-10-23 09:03
from django.db import migrations, models
import django.db.models.deletion
@ -19,8 +19,8 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
('caption', models.CharField(blank=True, max_length=250)),
('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailimages.Image')),
('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='gallery_images', to='zapisnik.BlogPage')),
('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailimages.image')),
('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='gallery_images', to='zapisnik.blogpage')),
],
options={
'ordering': ['sort_order'],

5
zapisnik/models.py

@ -1,7 +1,5 @@
from django.db import models
# New imports added for ParentalKey, Orderable, InlinePanel, ImageChooserPanel
from modelcluster.fields import ParentalKey
from wagtail.core.models import Page, Orderable
@ -40,9 +38,10 @@ class BlogPage(Page):
FieldPanel('date'),
FieldPanel('intro'),
FieldPanel('body', classname="full"),
InlinePanel('gallery_images', label="Gallery images"),
InlinePanel('gallery_images', label="Obrázky"),
]
class BlogPageGalleryImage(Orderable):
page = ParentalKey(BlogPage, on_delete=models.CASCADE, related_name='gallery_images')
image = models.ForeignKey(

30
zapisnik/templates/zapisnik/blog_index_page.html

@ -1,6 +1,6 @@
{% extends "base.html" %}
{% load wagtailcore_tags %}
{% load wagtailcore_tags wagtailimages_tags static %}
{% block body_class %}template-blogindexpage{% endblock %}
@ -11,14 +11,26 @@
{% for post in page.get_children %}
{% with post=post.specific %}
<h2><a href="{% pageurl post %}">{{ post.title }}</a></h2>
{% with post.main_image as main_image %}
{% if main_image %}{% image main_image fill-160x100 %}{% endif %}
{% endwith %}
<p>{{ post.intro }}</p>
{{ post.body|richtext }}
<div class="card mb-3">
<div class="row no-gutters">
<div class="col-md-4">
{% with post.main_image as main_image %}
{% if main_image %}
{% image main_image class="card-img" fill-400x150 %}
{% else %}
<img src="{% static "img/blank-image.jpg" %}" class="card-img" style="height: 150px;" alt="blank image">
{% endif %}
{% endwith %}
</div>
<div class="col-md-8">
<div class="card-body">
<h5 class="card-title"><a href="{% pageurl post %}">{{ post.title }}</a></h5>
<p class="card-text">{{ post.intro }}</p>
<p class="card-text"><small class="text-muted">{{ post.date }}</small></p>
</div>
</div>
</div>
</div>
{% endwith %}
{% endfor %}

2
zapisnik/templates/zapisnik/blog_page.html

@ -18,7 +18,7 @@
<p>{{ item.caption }}</p>
</div>
{% endfor %}
<div style="clear: left"></div>
<p><a href="{{ page.get_parent.url }}">Return to blog</a></p>
{% endblock %}
Loading…
Cancel
Save