{ "info": { "author": "Tim Godfrey", "author_email": "http://www.wholebaked.com.au/contact", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: News/Diary" ], "description": "====================\nDjango Richtext Blog\n====================\n\nFeatures\n========\n\n* Rich text editing implemented with TinyMCE\n* Full inline image upload support via TinyMCE using grapelli and filebrowser\n modules\n* Automatic image scales for posts\n* Support for post tagging\n* Support for comments in posts\n* Code syntax highlighting with pygments\n* Comment spam prevention through integration with django-simple-captcha\n* Atom and RSS feed support\n* Templates included to provide examples of how django-richtext-blog can be\n used\n* SEO optimised urls for posts and tags\n\nGetting Started\n===============\n\nIncluded is all the templates the blog system uses to display posts, tags etc.\n\nIf you're familiar enough with django you might be able to jump straight in, \notherwise below are the steps to get it up and running in its most basic form.\n\nThe author uses this app to implement his own blog therefore a working\nexample can be found in the wild here http://www.wholebaked.com.au/blog/posts/\n\nFor bug reports or the latest bleeding edge version go to the GitHub project\npage https://github.com/timmygee/django-richtext-blog\n\nInstalling\n----------\n\nBy far the simplest way to install the latest stable vesrion is to use pip or\neasy_install::\n\n $ pip install django-richtext-blog\n\nThis will pull in any missing package dependencies also.\n\nNext step is to set up a django site that will use the blog app.\n\nCurrently **django-richtext-blog** requires **django 1.3** to work correctly\ndue to the fact that it uses **django-filebrowser** to implement inline image\nuploads. Perhaps one day **django-filebrowser** will be taken to\n**django 1.4** and then this package in turn can be upgraded.\n\n**django-filebrowser** also currently requires **django-grapelli** for its\nimplementation of features on the admin pages. There is a version of\n**django-filebrowser** that does not use **django-grapelli**\n(http://pypi.python.org/pypi/django-filebrowser-django13 ) but is as yet \nuntested with this app. The below instructions assume the inclusion of\n**django-grapelli**.\n\nAssuming that django is installed you should have the ``django-admin.py``\nscript in the system path. Set up a new site project::\n\n $ django-admin.py startproject myblogsite\n\nNext configure your project to use the blog app and its dependencies by editing\n``myblogsite/settings.py``. For a full explanation of these steps see the\ndjango tutorial documentation at \nhttps://docs.djangoproject.com/en/1.3/intro/tutorial01/\n\nAt the top of ``settings.py`` add the lines::\n\n import os\n PROJECT_HOME=os.path.dirname(os.path.realpath(__file__))\n\nMake sure you set up your database and admin log in preferences while you're\nthere.\n\nUpdate the ``MEDIA_URL`` line to read::\n\n MEDIA_URL = '/media/'\n\nUpdate ``STATIC_ROOT`` to::\n\n STATIC_ROOT = os.path.join(PROJECT_HOME, 'static')\n\nUpdate ``ADMIN_MEDIA_PREFIX`` to::\n\n ADMIN_MEDIA_PREFIX = STATIC_URL + 'grappelli/'\n\nIn the ``INSTALLED_APPS`` setting add ``tinymce``, ``grappelli.dashboard``,\n``grappelli``, ``filebrowser`` and ``captcha`` before the entry for\n``django.contrib.admin``. Make sure the ``django.contrib.admin`` line is\nun-commented as well. After ``django.contrib.admindocs`` add an entry for\n``richtext_blog``. The resulting ``INSTALLED_APPS`` setting might look like::\n\n INSTALLED_APPS = (\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.sites',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'tinymce',\n 'grappelli.dashboard',\n 'grappelli',\n 'filebrowser',\n 'captcha',\n # Uncomment the next line to enable the admin:\n 'django.contrib.admin',\n # Uncomment the next line to enable admin documentation:\n\t'django.contrib.admindocs',\n 'richtext_blog'\n \t)\n\nAdd a ``TEMPLATE_CONTEXT_PROCESSORS`` setting and make sure it looks like::\n\n TEMPLATE_CONTEXT_PROCESSORS = (\n 'django.contrib.auth.context_processors.auth',\n 'django.core.context_processors.i18n',\n 'django.core.context_processors.media',\n 'django.core.context_processors.static',\n 'django.core.context_processors.csrf',\n 'django.contrib.messages.context_processors.messages',\n 'django.core.context_processors.request',\n # django-richtext-blog context processors\n 'richtext_blog.context_processors.blog_global'\n )\n\nAdd the below lines to the bottom of the ``settings.py`` file to implement\nsome default settings for the various dependencies::\n\n # TinyMCE settings\n TINYMCE_COMPRESSOR = True\n TINYMCE_DEFAULT_CONFIG = {\n 'width': '760',\n 'height': '480',\n 'plugins': 'fullscreen,media,preview,paste',\n 'theme': 'advanced',\n 'relative_urls': False,\n 'theme_advanced_toolbar_location': 'top',\n 'theme_advanced_toolbar_align': 'left',\n 'theme_advanced_buttons1': 'bold,italic,underline,strikethrough,|,' \\\n 'justifyleft,justifycenter,justifyright,justifyfull,|,forecolor,' \\\n 'formatselect,sub,sup,removeformat,charmap,|,bullist,numlist,|,' \\\n 'indent,outdent,|,link,unlink,anchor,image,media,|,visualaid,code,' \\\n 'preview,fullscreen',\n 'theme_advanced_buttons2': 'undo,redo,|,cut,copy,paste,pasteword,' \\\n 'pastetext,selectall,|,cleanup,help,|,hr',\n 'theme_advanced_buttons3': '',\n 'theme_advanced_blockformats': 'p,pre,address,blockquote,h1,h2,h3,h4,' \\\n 'h5,h6',\n 'plugin_preview_width' : '800',\n 'plugin_preview_height' : '600',\n 'paste_auto_cleanup_on_paste': 'true',\n }\n\n # Filebrowser settings\n FILEBROWSER_DIRECTORY = 'uploads/'\n\n # Grappelli settings\n GRAPPELLI_INDEX_DASHBOARD = \\\n 'richtext_blog.custom_dashboard.CustomIndexDashboard'\n\n # richtext_blog settings\n SLUGS_EDITABLE = True\n SITE_DESCRIPTION = 'My blog site'\n\nA full list of TinyMCE configuration options can be found at\nhttp://www.tinymce.com/wiki.php/Configuration\nThe author spent a little time tweaking TinyMCE to his preferences so feel\nfree to play around with your own settings. The current settings are fairly\nsufficient for most purposes however.\n\nNext you need to edit ``myblogsite/urls.py``. Add the includes::\n\n from filebrowser.sites import site\n from django.conf import settings\n\nMake sure admin is implemented::\n\n from django.contrib import admin\n admin.autodiscover()\n\nNext add the url pattern for adding **django-richtext-blog** to the root of the\nsite::\n\n url(r'', include('richtext_blog.urls')), \n\nAdd the url pattern for the 3rd party dependencies::\n\n url(r'^tinymce/', include('tinymce.urls')),\n url(r'^admin/filebrowser/', include(site.urls)),\n url(r'^grappelli/', include('grappelli.urls')),\n url(r'^captcha/', include('captcha.urls')),\n\nAnd the url pattern for the admin pages if not there already::\n\n url(r'^admin/', include(admin.site.urls)),\n\nFor live setups you may need the following pattern so that uploaded images are\nviewable::\n\n url(r'^media/(?P.*)$', 'django.views.static.serve',\n {'document_root': settings.MEDIA_ROOT}),\n\nAll rolled up into the one file your ``urls.py`` might look something like::\n\n from django.conf.urls.defaults import patterns, include, url\n from filebrowser.sites import site\n from django.conf import settings\n\n # Uncomment the next two lines to enable the admin:\n from django.contrib import admin\n admin.autodiscover()\n\n urlpatterns = patterns('',\n # richtext_blog definitions\n url(r'', include('richtext_blog.urls')), \n # 3rd party url definitions\n url(r'^tinymce/', include('tinymce.urls')),\n url(r'^admin/filebrowser/', include(site.urls)),\n url(r'^grappelli/', include('grappelli.urls')),\n url(r'^captcha/', include('captcha.urls')),\n url(r'^admin/', include(admin.site.urls)),\n\n # Media\n url(r'^media/(?P.*)$', 'django.views.static.serve',\n {'document_root': settings.MEDIA_ROOT}),\n )\n\nSave the file, then it's just the matter of preparing the database::\n\n $ python myblogsite/manage.py syncdb\n\nAnd if all went well you should be able to run it\n\n $ python myblogsite/manage.py runserver\n\nUsing django-richtext-blog\n--------------------------\n\nCreating a new post is all done from the admin pages. Comments can be added and\nmoderated when viewing a post in the admin section. Author comments can appear\na different colour to public comments on the public side of the site.\n\nThe image upload button on TinyMCE when editing a post will open up a the\n**django-filebrowser** dialogue where existing uploaded images can be chosen or\nnew ones uploaded. The image scale can be selected here too.\n\nFor syntax highlighting code, the code text must be contained within a\n``
`` block. TinyMCE has a shortcut to this in the formatting\ndrop-down menu listed as *Preformatted*. Pygments will try to guess the code\nformat but for more accurate control a css class attribute can be provided\nthat defines the format of the content. For python code simply add a\n``class=\"python\"`` to the ``
`` tag in TinyMCE's HTML edit mode so the\nopening tag would read ``
``. For simple command line \nformatting use ``class=\"console\"``. For a full list of class names that\ncan be used, check the list of lexers pygments supports at\nhttp://pygments.org/docs/lexers/ . What is listed under **Short names** is what\nshould be used as the class name.\n\nA default css stylesheet ``richtext_blog/static/blog-style.css`` is provided \nthat implements default styles but can be overidden easily.\nhttp://www.wholebaked.com.au/blog/posts/ is a good example of how custom\nstyles can change the appearance quite dramatically.\n\n``richtext_blog/templates/base.html`` provides an example of how all the\ncurrent features can be rolled up into a site and also shows how to implement\nthe blog's sidebar features.",
        "description_content_type": null,
        "docs_url": null,
        "download_url": "UNKNOWN",
        "downloads": {
            "last_day": -1,
            "last_month": -1,
            "last_week": -1
        },
        "home_page": "https://github.com/timmygee/django-richtext-blog",
        "keywords": "django blog richtext tinymce",
        "license": "BSD licence, see LICENCE.txt",
        "maintainer": null,
        "maintainer_email": null,
        "name": "django-richtext-blog",
        "package_url": "https://pypi.org/project/django-richtext-blog/",
        "platform": "UNKNOWN",
        "project_url": "https://pypi.org/project/django-richtext-blog/",
        "project_urls": {
            "Download": "UNKNOWN",
            "Homepage": "https://github.com/timmygee/django-richtext-blog"
        },
        "release_url": "https://pypi.org/project/django-richtext-blog/0.8.6/",
        "requires_dist": null,
        "requires_python": null,
        "summary": "A django app that implements a blog with the features we've grown accustomed to. Features: Rich text editing with TinyMCE; Full image upload support; Tags; Comments; Spam prevention; Atom/RSS feeds; Example templates; Code syntax highlighting; SEO optimised urls and more.",
        "version": "0.8.6"
    },
    "last_serial": 790502,
    "releases": {
        "0.8": [
            {
                "comment_text": "",
                "digests": {
                    "md5": "c11fdd74a3362bb097d02a3cf5e63a51",
                    "sha256": "28f1f86519b276d530e0b918ea460717d9236335f4fd534b1bc8fdb1eec31338"
                },
                "downloads": -1,
                "filename": "django-richtext-blog-0.8.tar.gz",
                "has_sig": false,
                "md5_digest": "c11fdd74a3362bb097d02a3cf5e63a51",
                "packagetype": "sdist",
                "python_version": "source",
                "requires_python": null,
                "size": 55338,
                "upload_time": "2012-07-10T10:25:48",
                "url": "https://files.pythonhosted.org/packages/41/e9/cb47074ae48abd63ea47d4598ddc13d6f6edaa36d53a0c440be6b25c6936/django-richtext-blog-0.8.tar.gz"
            }
        ],
        "0.8.1": [
            {
                "comment_text": "",
                "digests": {
                    "md5": "0fa2b77273e444ff14451fea7f748b8c",
                    "sha256": "20805199babc6deb90802df91fc12cdf79a55cac7852250fae711d18db3914f2"
                },
                "downloads": -1,
                "filename": "django-richtext-blog-0.8.1.tar.gz",
                "has_sig": false,
                "md5_digest": "0fa2b77273e444ff14451fea7f748b8c",
                "packagetype": "sdist",
                "python_version": "source",
                "requires_python": null,
                "size": 56253,
                "upload_time": "2012-07-12T13:47:38",
                "url": "https://files.pythonhosted.org/packages/c0/2e/48f629ba388f7d1cab29c586b2f03ad58a21511dee81bb040be041664950/django-richtext-blog-0.8.1.tar.gz"
            }
        ],
        "0.8.3": [
            {
                "comment_text": "",
                "digests": {
                    "md5": "8e6cc8c01093dd32e2f14ad0c6ee2f9e",
                    "sha256": "88902de89c6bd50eceb62dd69ccc2911687f7b99226a6ac98b617093332c41ce"
                },
                "downloads": -1,
                "filename": "django-richtext-blog-0.8.3.tar.gz",
                "has_sig": false,
                "md5_digest": "8e6cc8c01093dd32e2f14ad0c6ee2f9e",
                "packagetype": "sdist",
                "python_version": "source",
                "requires_python": null,
                "size": 67605,
                "upload_time": "2012-07-18T15:02:42",
                "url": "https://files.pythonhosted.org/packages/1a/c4/e178fbe3dd05a9fbf86f119b86076b84c2a93bb7db1a30264735a7b2671b/django-richtext-blog-0.8.3.tar.gz"
            }
        ],
        "0.8.4": [
            {
                "comment_text": "",
                "digests": {
                    "md5": "b72257c5682f16cc6b74272a2058f4ce",
                    "sha256": "33c3f09fb9d2d68deb52766ca296b510819fb02ad19b6a430cd8e8309064cc48"
                },
                "downloads": -1,
                "filename": "django-richtext-blog-0.8.4.tar.gz",
                "has_sig": false,
                "md5_digest": "b72257c5682f16cc6b74272a2058f4ce",
                "packagetype": "sdist",
                "python_version": "source",
                "requires_python": null,
                "size": 68170,
                "upload_time": "2012-07-18T15:34:33",
                "url": "https://files.pythonhosted.org/packages/bb/ec/cec13d7568b7c981072022a4cf0da434db3d98cf490716da5a76055c1fd0/django-richtext-blog-0.8.4.tar.gz"
            }
        ],
        "0.8.5": [
            {
                "comment_text": "",
                "digests": {
                    "md5": "7ef44e806967e26ab4e27547750fad20",
                    "sha256": "c099d9e2d34aca66ef3a888be40eca2444047db5c89fc0dcc7a2c6d16a7f38fc"
                },
                "downloads": -1,
                "filename": "django-richtext-blog-0.8.5.tar.gz",
                "has_sig": false,
                "md5_digest": "7ef44e806967e26ab4e27547750fad20",
                "packagetype": "sdist",
                "python_version": "source",
                "requires_python": null,
                "size": 68211,
                "upload_time": "2012-07-18T15:37:53",
                "url": "https://files.pythonhosted.org/packages/92/8b/2656f45859241bec2c4c8cff566cbbaa6a0fab5a7f8836ab69307dbbd330/django-richtext-blog-0.8.5.tar.gz"
            }
        ],
        "0.8.6": [
            {
                "comment_text": "",
                "digests": {
                    "md5": "f5b1a719c6ab3888d4fe9ae63b70ed73",
                    "sha256": "70f43f871bee03a8bc9cbd1ae876570b25b25c63bdf046a7a034177d33402c9b"
                },
                "downloads": -1,
                "filename": "django-richtext-blog-0.8.6.tar.gz",
                "has_sig": false,
                "md5_digest": "f5b1a719c6ab3888d4fe9ae63b70ed73",
                "packagetype": "sdist",
                "python_version": "source",
                "requires_python": null,
                "size": 73035,
                "upload_time": "2012-07-19T10:27:44",
                "url": "https://files.pythonhosted.org/packages/90/71/4a1fe15e915d90ff349d1a3007dafbdea2af6215b58a9b40f23182e24dc4/django-richtext-blog-0.8.6.tar.gz"
            }
        ]
    },
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "md5": "f5b1a719c6ab3888d4fe9ae63b70ed73",
                "sha256": "70f43f871bee03a8bc9cbd1ae876570b25b25c63bdf046a7a034177d33402c9b"
            },
            "downloads": -1,
            "filename": "django-richtext-blog-0.8.6.tar.gz",
            "has_sig": false,
            "md5_digest": "f5b1a719c6ab3888d4fe9ae63b70ed73",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 73035,
            "upload_time": "2012-07-19T10:27:44",
            "url": "https://files.pythonhosted.org/packages/90/71/4a1fe15e915d90ff349d1a3007dafbdea2af6215b58a9b40f23182e24dc4/django-richtext-blog-0.8.6.tar.gz"
        }
    ]
}