Package: django-articles
django-articles is a powerful, pluggable blogging application for
Django-powered sites.  It’s also what powershttp://www.codekoala.com/and a
handful of other awesome sites.FeaturesTags for articles, with a tag cloud template tagAuto-completion for tags in the Django adminAuto-tagging: assigning existing tags to articles when they’re present in the
article contentAbility to post in the futureArticle expiration facilitiesArticles from emailArticle attachmentsArticle statuses–“draft” and “finished” are there by defaultAllows articles to be written in plain text/HTML or using Markdown,
ReStructured Text, or Textile markupRelated articlesFollow-up articlesComments by DisqusArticle archive, with paginationInternationalization-readyDetects links in articles and creates a per-article index for youWord countRSS feeds for the latest articlesRSS feeds for the latest articles by tagSouth migrationsRequirementsdjango-articleswants a modern version of Django–something after 1.1.  It
used to rely ondjango.contrib.commentsfor commenting needs, but I
recently switched toDisqus.  Included herein is a
management command to convertdjango.contrib.commentscomments to Disqus.This project also expectsdjango.contrib.sites,django.contrib.admin,django.contrib.markup,django.contrib.auth,django.contrib.humanize, anddjango.contrib.syndicationto be properly
installed.If you plan to use the schema migrations, you’ll need to installSouth.NoteNew in 2.1.0InstallationDownloaddjango-articlesusingoneof the following methods:Checkout from MercurialUse one of the following commands:hg clone http://bitbucket.org/codekoala/django-articles/
hg clone http://django-articles.googlecode.com/hg/ django-articlesCheckout from GitHubUse the following command:git clone http://github.com/codekoala/django-articles.gitThe CheeseShopUse one of the following commands:pip install django-articles
easy_install django-articlesConfigurationFirst of all, you must add this project to your list ofINSTALLED_APPSinsettings.py:INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.humanize',
    'django.contrib.markup',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.syndication',
    ...
    'articles',
    'south',
    ...
)Runpython manage.py syncdb.  This creates a few tables in your database
that are necessary for operation.  If you choose to use South, you’ll probably
need to runpython manage.py migrate articlesinstead.Next, set a couple of settings in yoursettings.py:DISQUS_USER_API_KEY: Your user API key from Disqus.  This is free, and
you can learn how to get it fromDisqus’s API Pageor
you can tryhttp://disqus.com/api/get_my_key/when you’re logged into Disqus.
You only need this one if you’re going to be converting comments fromdjango.contrib.commentsto Disqus.DISQUS_FORUM_SHORTNAME: The name of your Disqus site.  This is what’s
used to link comments to your site.Less frequently changed settings:ARTICLES_TEASER_LIMIT: The number of words to display in the teaser.
Defaults to75.ARTICLES_AUTO_TAG: Whether or not to automatically tag articles. Defaults
toTrue.ARTICLES_DEFAULT_DB: Database in which to store articles. Defaults todefault.ARTICLES_LOOKUP_LINK_TITLE: Whether to fetch the title of remote links or
use the local name of the link. Defaults toTrue.Also, make sure that you have the following context processors in yourTEMPLATE_CONTEXT_PROCESSORStuple:django.contrib.auth.context_processors.authdjango.core.context_processors.i18ndjango.core.context_processors.mediadjango.core.context_processors.requestNoteNew in 2.1.2If you want to specify the default database to use fordjango-articles, you
can specify theARTICLES_DEFAULT_DBsetting.  This defaults todefault.Template IntegrationThere are several template blocks thatdjango-articlesexpects yourbase.htmlfile to contain:titlemeta-keywordsmeta-descriptionextra-headcontentfooterTag Auto-CompletionIf you would like to take advantage of the auto-completion feature for tags,
copy the files from thearticles/mediadirectories into your static media
directory.django-articlesexpects to find each of those directories/files
in yoursettings.MEDIA_URLdirectory–if this does not suit your needs, you
may override theMediaclass ofarticles.forms.ArticleAdminFormwith
the appropriate paths.Another assumption that is made by this feature is that the prefix you assign
to yourdjango-articlesinstallation in yourROOT_URLCONFwill be^blog/.  For example:url(r'^blog', include('articles.urls')),If this does not match your installation, all you need to change is thejs/tag_autocomplete.jsto reflect the proper path.When that’s done, you should be able to begin usingdjango-articles!Articles From EmailNoteNew in 1.9.2Version DependenciesThe articles from email feature requires Python 2.4 or greater.I’ve been working on making it possible fordjango-articlesto post
articles that you email to a special mailbox.  This seems to be working on the
most basic levels right now.  It’s not been tested in very many scenarios, and
I would appreciate it if you could post problems with it in the ticket tracker
athttp://bitbucket.org/codekoala/django-articles/so we can make it work
really well.Things to keep in mind:Anyactiveuser who is adjango.contrib.auth.models.Userand has an
email address associated with their user information is a valid sender for
articles from email.  This is how the author of an article is determined.Only the following fields are currently populated by the articles from email
feature:authortitleslug (uniqueness is handled)contentmarkuppublish_dateis_activeAny and all other attributes about an article must be configured later on
using the standard mechanisms (aka the Django admin).There is a new management command to handle all of the magic for this
feature:check_for_articles_from_email.  This command is intended to be
called either manually or via external scheduling utilities (likecron)Email messagesare deletedafter they are turned into articles.  This
means that you should probably have aspecial mailbox dedicated to
django-articles and articles from email.  However, only emails whose sender
matches the email address of an active user are deleted (as described above).Attachments are currently not bothered with.  Don’t worry, they will be in
the future. :DConfigurationThere are several new variables that you can configure in yoursettings.pyto enable articles from email, specifying aARTICLES_FROM_EMAILdictionary:protocol- EitherIMAP4orPOP3.Default:IMAP4host- The mail server.Example:mail.yourserver.comport- The port to use to connect to your mail serverkeyfile- The keyfile used to access your mail server.  This is only used
ifsslisTrue, and even then it’s optional.untestedcertfile- The certfile used to access your mail server.  This is only
used ifsslisTrue, and even then it’s optional.untesteduser- The username used to access your mailboxpassword- The password associated with the user to access your mailboxssl- Whether or not to connect to the mail server using SSL.Default:Falseautopost- Whether or not to automatically post articles that are created
from email messages.  If this isFalse, the articles will be marked as
inactive and you must manually make them active.Default:Falsemarkup- The default markup language to use for articles from email.
Options include:hfor HTML/plain textmfor Markdownrfor reStructuredTexttfor TextileDefault:hacknowledge- Whether or not to email out an acknowledgment
message when articles are created from email.Default:FalseExample configuration:ARTICLES_FROM_EMAIL = {
    'protocol': 'IMAP4',
    'host': 'mail.yourserver.com',
    'port': 9000,
    'keyfile': '/path/to/keyfile',
    'certfile': '/path/to/certfile',
    'user': 'your_username',
    'password': 'your_password',
    'ssl': True,
    'autopost': True,
    'markup': 'r',
    'acknowledge': True,
}Article AttachmentsNoteNew in 1.9.6You can now attach files to your articles and have them be included with the
article on the site.  Attachments can be created using the Django admin while
composing your articles.  You may also attach files to emails that you send to
the special mailbox (described above) if you so desire.Article StatusesNoteNew in 1.9.6As of1.9.6, you may specify the state of an article when you save it.
This allows you to begin composing an article, save it, and come back later to
finish it.  In the past, this behavior was handled by not setting a publish
date for the article.  However, saving an unfinished article with a non-live
status allows superusers to view the article on the site as though it were
live.  In the future, I plan to allow authors to view non-live versions of
their articles.The default status for an article will always be the Article Status object with
the lowestorderingvalue.  This includes negative integers.  If you want
all articles to beFinishedby default, go ahead and update theorderingon that object to be less than theorderingvalue for theDraftobject (and/or any others you create).Auto-TaggingNoteNew in 2.1.0The auto-tagging feature allows you to easily apply any of your current tags to
your articles.  When you save an Article object with auto-tagging enabled for
that article,django-articleswill go through each of your existing tags to
see if the entire word appears anywhere in your article’s content.  If a match
is found, that tag will be added to the article.For example, if you have tagstestandart, and you wrote a new
auto-tagged Article with the text:This is a test article.django-articleswould automatically apply thetesttag to this article,
but not thearttag.  It will only apply thearttag automatically when
the actual word “art” appears in the content.Auto-tagging does not remove any tags that are already assigned to an article.
This means that you can still add tags the good, old-fashioned way in the
Django Admin without losing them.  Auto-tagging willonlyadd to an article’s
existing tags (if needed).Auto-tagging is enabled for all articles by default.  If you want to disable it
by default (and enable it on a per-article basis), setARTICLES_AUTO_TAGtoFalsein yoursettings.pyfile.Auto-Taggingdoes notattempt to produce any keywords that magically
represent the content of your articles.  Onlyexistingtags are used!!Help & ContributingGood luck!  Please contact me with any questions or concerns you have with the
project!  If you’re interested in reporting a bug or feature request, the
official ticket tracker is athttp://bitbucket.org/codekoala/django-articles/