aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYaroslav de la Peña Smirnov <contact@yaroslavps.com>2018-05-31 15:08:24 +0300
committerYaroslav de la Peña Smirnov <contact@yaroslavps.com>2018-05-31 15:08:24 +0300
commitdfeb4deaa712a726a46489a2d1d04eb5257aa86c (patch)
tree0e6a8d65961a642263536ead8e70bf1516f2eb05
parent5a7466204b4030873405b1a0fcb8b208762453ee (diff)
parentd6c508bb46d660947718083e3fa214049253c42b (diff)
downloadw3blog-dfeb4deaa712a726a46489a2d1d04eb5257aa86c.tar.gz
w3blog-dfeb4deaa712a726a46489a2d1d04eb5257aa86c.zip
fixed bugs, etc.
-rwxr-xr-xREADME.md4
-rw-r--r--weblog/migrations/0008_auto_20180329_1316.py30
-rwxr-xr-xweblog/models.py12
-rwxr-xr-xweblog/templates/weblog/sidebar_archive.html8
-rwxr-xr-xweblog/templates/weblog_base.html1
-rwxr-xr-xweblog/templates/weblog_base_old.html35
6 files changed, 46 insertions, 44 deletions
diff --git a/README.md b/README.md
index f52aac7..d38ac9b 100755
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-# Weblog version 0.3 #
+# Weblog version 0.2 #
Weblog is a simple blog engine for Django, with some focus on multilingual capabilities. It includes all of the basic features expected of a traditional Web log (also known as blog), as well as multilingual features, i.e. translations of blog posts which are delivered automatically in the user's preferred language using the internationalization capabilities of Django, enabling the possibility of targeting people from different countries in a single blog/site.
@@ -31,6 +31,6 @@ This django app is still a work in progress. More features will be added/complet
'posts_per_page': 10,
}
-5. Note that if you use your own base template, you will either need to link bootstrap in your base template's head, or write your own styles for the site based on the bootstrap classes. You will as well need to link files "weblog/css/weblog.css" and "weblog/js/weblog.js" in your html head.
+5. Note that if you use your own base template, you will either need to link bootstrap (v3.2 at the moment) in your base template's head, or write your own styles for the site based on the bootstrap classes. You will as well need to link files "weblog/css/weblog.css" and "weblog/js/weblog.js" in your html head, or write your own.
Note: This package depends on the following python packages (besides Django and their dependencies): django-summernote
diff --git a/weblog/migrations/0008_auto_20180329_1316.py b/weblog/migrations/0008_auto_20180329_1316.py
new file mode 100644
index 0000000..f66aa65
--- /dev/null
+++ b/weblog/migrations/0008_auto_20180329_1316.py
@@ -0,0 +1,30 @@
+# Generated by Django 2.0.3 on 2018-03-29 13:16
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('weblog', '0007_auto_20180122_1943'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='blogpost',
+ name='author',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='Author'),
+ ),
+ migrations.AlterField(
+ model_name='category',
+ name='parent_category',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='weblog.Category', verbose_name='Parent category'),
+ ),
+ migrations.AlterField(
+ model_name='postcomment',
+ name='author',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Author'),
+ ),
+ ]
diff --git a/weblog/models.py b/weblog/models.py
index 3c4935e..96d9032 100755
--- a/weblog/models.py
+++ b/weblog/models.py
@@ -7,7 +7,7 @@ from django.utils.translation import ugettext_lazy as _, pgettext_lazy
class Category(models.Model):
name = models.CharField(max_length=250, verbose_name=pgettext_lazy('Noun, not personal name', 'Name'), blank=False, unique=True)
slug = models.SlugField(max_length=60, verbose_name=_('Slug (URL)'), db_index=True, unique=True)
- parent_category = models.ForeignKey('self', verbose_name=_('Parent category'), null=True, blank=True)
+ parent_category = models.ForeignKey('self', verbose_name=_('Parent category'), on_delete=models.PROTECT, null=True, blank=True)
def get_absolute_url(self):
return reverse('weblog:CategoryIndex', kwargs={'category_slug': self.slug})
@@ -22,7 +22,7 @@ class Category(models.Model):
class CategoryTranslation(models.Model):
name = models.CharField(max_length=250, verbose_name=pgettext_lazy('Noun, not personal name', 'Name'), blank=False)
language = models.CharField(max_length=5, verbose_name=_('Language (ISO)'), blank=False)
- category = models.ForeignKey(Category, verbose_name = pgettext_lazy('Post category', 'Category'), blank=False)
+ category = models.ForeignKey(Category, verbose_name = pgettext_lazy('Post category', 'Category'), on_delete=models.CASCADE, blank=False)
def __str__(self):
return self.name
@@ -36,7 +36,7 @@ class CategoryTranslation(models.Model):
class BlogPost(models.Model):
- author = models.ForeignKey(User, verbose_name=_('Author'))
+ author = models.ForeignKey(User, verbose_name=_('Author'), on_delete=models.PROTECT)
title = models.CharField(max_length=100, verbose_name=pgettext_lazy('As in name', 'Title'), blank=False)
content = models.TextField(verbose_name=pgettext_lazy('Of post, comment, article, etc.', 'Content'), blank=False)
preview_image = models.ImageField(upload_to='weblog/preview_images/%Y/%m/%d/', blank=True, verbose_name=_('Preview image'))
@@ -65,7 +65,7 @@ class BlogPost(models.Model):
verbose_name_plural = _('Blog Posts')
class Translation(models.Model):
- post = models.ForeignKey(BlogPost, verbose_name=pgettext_lazy('Noun, as in blog post', 'Post'))
+ post = models.ForeignKey(BlogPost, verbose_name=pgettext_lazy('Noun, as in blog post', 'Post'), on_delete=models.CASCADE)
language = models.CharField(max_length=5, verbose_name=_('Language (ISO)'), blank=False)
title = models.CharField(max_length=100, verbose_name=pgettext_lazy('As in name', 'Title'), blank=False)
content = models.TextField(verbose_name=pgettext_lazy('Of post, comment, article, etc.', 'Content'), blank=False)
@@ -77,8 +77,8 @@ class Translation(models.Model):
verbose_name_plural = _('Translations')
class PostComment(models.Model):
- author = models.ForeignKey(User, verbose_name=_('Author'), null=True, blank=True)
- post = models.ForeignKey(BlogPost, verbose_name=pgettext_lazy('Noun, as in blog post', 'Post'))
+ author = models.ForeignKey(User, verbose_name=_('Author'), on_delete=models.SET_NULL, null=True, blank=True)
+ post = models.ForeignKey(BlogPost, verbose_name=pgettext_lazy('Noun, as in blog post', 'Post'), on_delete=models.CASCADE)
content = models.TextField(verbose_name=pgettext_lazy('Of post, comment, article, etc.', 'Content'), blank=False)
class Meta:
diff --git a/weblog/templates/weblog/sidebar_archive.html b/weblog/templates/weblog/sidebar_archive.html
index 5953bfe..ca74018 100755
--- a/weblog/templates/weblog/sidebar_archive.html
+++ b/weblog/templates/weblog/sidebar_archive.html
@@ -1,5 +1,6 @@
{% load i18n %}
<h3>{% trans 'Archive' context 'Blog archive' %}</h3>
+{% if archive %}
<ul class='archive-list'>
{% for a_year in archive %}
<li><a class="node-toggle" node-target="{{ a_year.0 }}-list" node-state="closed" href="javascript:void(0)" onclick="toggleNode(this);">+</a> <a href="{% url 'weblog:ArchiveIndex' year=a_year.0 %}">{{ a_year.0 }}</a>
@@ -10,4 +11,9 @@
</ul>
</li>
{% endfor %}
-</ul> \ No newline at end of file
+{% else %}
+<div class="text-center">
+ <p>{% trans 'Nothing has been posted yet.' %}</p>
+</div>
+{% endif %}
+</ul>
diff --git a/weblog/templates/weblog_base.html b/weblog/templates/weblog_base.html
index 9a739cb..ce941e5 100755
--- a/weblog/templates/weblog_base.html
+++ b/weblog/templates/weblog_base.html
@@ -12,6 +12,7 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
<script src="{% static '/weblog/js/weblog.js' %}" defer></script>
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" defer></script>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
diff --git a/weblog/templates/weblog_base_old.html b/weblog/templates/weblog_base_old.html
deleted file mode 100755
index a4dbd30..0000000
--- a/weblog/templates/weblog_base_old.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-{% load static %}
-<html>
- <head>
- <meta charset="utf-8">
- <title>Simple blog - {% block title_block %} Home {% endblock %}</title>
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
- <link rel="stylesheet" href="{% static '/weblog/css/weblog.css' %}">
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" defer></script>
- <script src="{% static '/weblog/js/weblog.js' %}" defer></script>
- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" defer></script>
- </head>
- <body>
- <nav class="navbar navbar-inverse">
- <div class="container nav-container">
- <div class="navbar-header">
- <a class="navbar-brand" href="{% url 'weblog:Index' %}">{{ blog_title }}</a>
- </div>
- <div class="collapse navbar-collapse">
- <ul class="nav navbar-nav navbar-right">
- <li><a href="{% url 'weblog:ChangeLanguage' language='en' %}?next={{ request.path }}">EN</a></li>
- <li><a href="{% url 'weblog:ChangeLanguage' language='es' %}?next={{ request.path }}">ES</a></li>
- <li><a href="{% url 'weblog:ChangeLanguage' language='ru' %}?next={{ request.path }}">RU</a></li>
- </ul>
- </div>
- </div>
- </nav>
- <div class="container">
- {% block content_block %}
- {% block blog_block %}
- {% endblock %}
- {% endblock %}
- </div>
- </body>
-</html> \ No newline at end of file