Skip to main content

Bilingual blog on Django

Project description

Introduction

Marcus is billingual blog engine, written Ivan Sagalaev (https://softwaremaniacs.org/about/).

This fork over augmented and has the following features:

  • Billingual articles, Categories, Tags and Comments

  • Simple file uploader for the article with a preview images

  • Archive and date navigation

  • Pingback

  • Automatically pings search engines on new entries

  • Supports markdown (https://pypi.python.org/pypi/markdown2)

  • Comments have CSRF protection via JavaScript

  • Sitemaps for articles, feeds for articles and comments

  • A simple search module

  • A pretty minimalistic theme

  • Import from Wordpress (command “wordpress_importer”)

Examples

About marcus

Screenshots:

https://raw.github.com/adw0rd/marcus/master/docs/screenshots/thumbnails/articles.png https://raw.github.com/adw0rd/marcus/master/docs/screenshots/thumbnails/article.png https://raw.github.com/adw0rd/marcus/master/docs/screenshots/thumbnails/admin_articles.png https://raw.github.com/adw0rd/marcus/master/docs/screenshots/thumbnails/admin_article.png

Installation

https://pypi.python.org/pypi/django-marcus

mkvirtualenv marcus
pip install --process-dependency-links django-marcus  # use "--process-dependency-links" for pip>=1.5
django-admin.py startproject <project_name>

Configuration

Add to settings.py:

import os
import imp
from django.utils.translation import ugettext_lazy as _

PROJECT_ROOT = os.path.dirname(__file__)
PROJECT_NAME = os.path.basename(PROJECT_ROOT)
STORAGE_ROOT = os.path.join('/storage', PROJECT_NAME)
LOCALE_PATHS = (
    os.path.join(imp.find_module('marcus')[1], 'locale'),
)

ADMINS = (
    ('Admin', 'admin@example.com'),
)
// Please setup settings.MANAGERS for notify about new comments
MANAGERS = ADMINS

MARCUS_PAGINATE_BY = 20
MARCUS_ARTICLES_ON_INDEX = 10
MARCUS_COMMENTS_ON_INDEX = 10
MARCUS_COMMENT_EXCERPTS_ON_INDEX = 2
MARCUS_ITEMS_IN_FEED = 20
MARCUS_AUTHOR_ID = 1
MARCUS_TAG_MINIMUM_ARTICLES = 0

# Specify blog names:
MARCUS_TITLE = _('Blog')
MARCUS_SUBTITLE = _('Sample blog')

MARCUS_DESCRIPTION = _('')
MARCUS_KEYWORDS = _('')

# You can specify extras for markdown:
MARCUS_MARKDOWN_EXTRAS = ['code-friendly', 'wiki-tables']

# Specify a fields which will used in search:
MARCUS_SEARCH_FIELDS = [
    'slug', 'title_ru', 'title_en', 'text_ru', 'text_en',
    'categories__slug', 'categories__title_ru', 'categories__title_en',
]

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
)

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'marcus.context_processors.marcus_context',
            ],
        },
    },
]

MEDIA_ROOT = os.path.join(STORAGE_ROOT, 'media')
MEDIA_URL = '/media/'

STATIC_ROOT = os.path.join(STORAGE_ROOT, 'static')
STATIC_URL = '/static/'

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.flatpages',
    'marcus'
)

Add to urls.py:

from django.urls import include, path
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.contrib import admin

admin.autodiscover()

urlpatterns = [
    path('admin/doc/', include('django.contrib.admindocs.urls')),
    path('admin/', admin.site.urls),
    path('', include(('marcus.urls', 'marcus')), namespace='marcus'),
]

urlpatterns += staticfiles_urlpatterns()

And run so:

python ./manage.py runserver 8000

Wordpress importer settings:

Marcus includes “wordpress_importer” it is command that imports your entries from the Wordpress to the Marcus. It has a built-in pipelines for additional filtering data.

MARCUS_WORDPRESS_IMPORTER = {
    'ARTICLE_PIPELINES': (
        'marcus.wordpress_importer.pipelines.CodecolorerToHighlightJsPipeline',
        'marcus.wordpress_importer.pipelines.WpContentUploadsToMediaPipeline',
        'marcus.wordpress_importer.pipelines.BbCodeDetector',
        'marcus.wordpress_importer.pipelines.EscapeTheUnderscore',
        # 'marcus.wordpress_importer.pipelines.ChangeUrlToArticleForImagePipeline',
        # 'marcus.wordpress_importer.pipelines.RemoveImgClassPipeline',
        # 'marcus.wordpress_importer.pipelines.HtmlToMarkdownPipeline',
    ),
    # 'CATEGORY_PIPELINES': tuple(),
    # 'TAG_PIPELINES': tuple(),
    'COMMENT_PIPELINES': (
        'marcus.wordpress_importer.pipelines.CodecolorerToHighlightJsPipeline',
    ),
    'ALLOW_DOMAINS': (  # Used to determine the internal domain to import only local "wp-content/uploads", etc.
        'my-old-blog-on-wordpress.org',
        'www.my-old-blog-on-wordpress.org',
    ),
}

Installation guide for new projects:

django-admin.py startproject project
cd project
pip install django-marcus
# Copy the settings to settings.py and you urls to you urls.py described above
python ./manage.py migrate
python ./manage.py createsuperuser
python ./manage.py runserver 8000

MySQL Timezone Fixes

If you use MySQL and have problem with open an article by URL, it is likely that you did not work CONVERT_TZ, it can be solved as follows:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

License

BSD licensed.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-marcus-1.0.5.tar.gz (163.6 kB view details)

Uploaded Source

File details

Details for the file django-marcus-1.0.5.tar.gz.

File metadata

  • Download URL: django-marcus-1.0.5.tar.gz
  • Upload date:
  • Size: 163.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.7

File hashes

Hashes for django-marcus-1.0.5.tar.gz
Algorithm Hash digest
SHA256 a0a3e2d8f18f1f5f0f1072c6b3ec5c575484d58469f4e6920afb56d06de9a705
MD5 a48e02bbefef0f4cc33a87e943a4e3c9
BLAKE2b-256 206ee5d3f6b469978bcf68a3bcc41c9c42a5fb476aad8c739566a4ea712354fe

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page