diff --git a/docs/settings.rst b/docs/settings.rst index b1c35122..e4a174ad 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -62,10 +62,13 @@ Setting name (default value) What does it do? `RELATIVE_URLS` (``True``) Defines whether Pelican should use relative URLs or not. `SITENAME` (``'A Pelican Blog'``) Your site name -`SITEURL` Base URL of your website. Note that this is - not a way to tell Pelican whether to use relative URLs - or static ones. You should instead use the - `RELATIVE_URL` setting for that purpose. +`SITEURL` Base URL of your website. Not defined by default, + which means the base URL is assumed to be "/" with a + root-relative URL structure. If `SITEURL` is specified + explicitly, URLs will be generated with an absolute + URL structure (including the domain). If you want to + use relative URLs instead of root-relative or absolute + URLs, you should instead use the `RELATIVE_URL` setting. `STATIC_PATHS` (``['images']``) The static paths you want to have accessible on the output path "static". By default, Pelican will copy the 'images' folder to the @@ -86,10 +89,10 @@ Setting name (default value) What does it do? URL settings ------------ -You can customize the URL's and locations where files will be saved. The URL's and -SAVE_AS variables use python's format strings. These variables allow you to place -your articles in a location such as '{slug}/index.html' and link to then as -'{slug}' for clean urls. These settings give you the flexibility to place your +You can customize the URLs and locations where files will be saved. The URLs and +SAVE_AS variables use Python's format strings. These variables allow you to place +your articles in a location such as '{slug}/index.html' and link to them as +'{slug}' for clean URLs. These settings give you the flexibility to place your articles and pages anywhere you want. Note: If you specify a datetime directive, it will be substituted using the @@ -216,15 +219,26 @@ the ``TAG_FEED`` and ``TAG_FEED_RSS`` settings: ================================================ ===================================================== Setting name (default value) What does it do? ================================================ ===================================================== -`CATEGORY_FEED` ('feeds/%s.atom.xml'[2]_) Where to put the category Atom feeds. -`CATEGORY_FEED_RSS` (``None``, i.e. no RSS) Where to put the category RSS feeds. +`FEED_DOMAIN` (``None``, i.e. base URL is "/") The domain prepended to feed URLs. Since feed URLs + should always be absolute, it is highly recommended + to define this (e.g., "http://feeds.example.com"). If + you have already explicitly defined SITEURL (see + above) and want to use the same domain for your + feeds, you can just set: `FEED_DOMAIN = SITEURL` `FEED` (``'feeds/all.atom.xml'``) Relative URL to output the Atom feed. `FEED_RSS` (``None``, i.e. no RSS) Relative URL to output the RSS feed. -`TAG_FEED` (``None``, ie no tag feed) Relative URL to output the tag Atom feed. It should +`CATEGORY_FEED` ('feeds/%s.atom.xml'[2]_) Where to put the category Atom feeds. +`CATEGORY_FEED_RSS` (``None``, i.e. no RSS) Where to put the category RSS feeds. +`TAG_FEED` (``None``, i.e. no tag feed) Relative URL to output the tag Atom feed. It should be defined using a "%s" match in the tag name. `TAG_FEED_RSS` (``None``, ie no RSS tag feed) Relative URL to output the tag RSS feed `FEED_MAX_ITEMS` Maximum number of items allowed in a feed. Feed item quantity is unrestricted by default. +`FEED_MAIN_URL` (``'feeds/all.atom.xml'``) URL appended to domain for the main Atom feed and + used to populate its `` in the base template. + Useful when you want the feed link to differ from the + filesystem path, such as when using web server + aliases/rewrites or FeedBurner (see below). ================================================ ===================================================== If you don't want to generate some of these feeds, set ``None`` to the @@ -232,6 +246,25 @@ variables above. .. [2] %s is the name of the category. +FeedBurner +---------- + +If you want to use FeedBurner for your primary Atom feed, there are two +primary fields to configure in the `FeedBurner +`_ interface: "Original Feed" and "Feed Address". +If using the default Pelican `FEED` attribute and assuming your feeds +are served from the `www.example.com` domain, you would enter +`http://www.example.com/feeds/all.atom.xml` in the "Original Feed" field in +FeedBurner. + +For the "Feed Address" field in the FeedBurner interface, you may choose +whatever suffix you prefer. In your Pelican settings, assign this suffix to +the `FEED_MAIN_URL` setting. So if your FeedBurner feed address is set to +`http://feeds.feedburner.com/myblogfeed`, in your Pelican settings you would +set: `FEED_MAIN_URL = "myblogfeed"`. Then set the `FEED_DOMAIN` setting to +`http://feeds.feedburner.com`, or `http://feeds.example.com` if you are using +a CNAME on your own domain (i.e., FeedBurner's "MyBrand" feature). + Pagination ========== diff --git a/pelican/settings.py b/pelican/settings.py index 97a2e83d..0c66b6f0 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -22,6 +22,7 @@ _DEFAULT_CONFIG = {'PATH': None, 'STATIC_PATHS': ['images', ], 'THEME_STATIC_PATHS': ['static', ], 'FEED': 'feeds/all.atom.xml', + 'FEED_MAIN_URL': 'feeds/all.atom.xml', 'CATEGORY_FEED': 'feeds/%s.atom.xml', 'TRANSLATION_FEED': 'feeds/all-%s.atom.xml', 'FEED_MAX_ITEMS': '', @@ -71,26 +72,45 @@ _DEFAULT_CONFIG = {'PATH': None, def read_settings(filename=None): + if filename: + local_settings = get_settings_from_file(filename) + else: + local_settings = _DEFAULT_CONFIG + configured_settings = configure_settings(local_settings, None, filename) + return configured_settings + + +def get_settings_from_file(filename, default_settings=None): """Load a Python file into a dictionary. """ - context = _DEFAULT_CONFIG.copy() + if default_settings == None: + default_settings = _DEFAULT_CONFIG + context = default_settings.copy() if filename: tempdict = {} execfile(filename, tempdict) for key in tempdict: if key.isupper(): context[key] = tempdict[key] + return context - # Make the paths relative to the settings file + +def configure_settings(settings, default_settings=None, filename=None): + """Provide optimizations, error checking, and warnings for loaded settings""" + if default_settings is None: + default_settings = _DEFAULT_CONFIG + + # Make the paths relative to the settings file + if filename: for path in ['PATH', 'OUTPUT_PATH']: - if path in context: - if context[path] is not None and not isabs(context[path]): - context[path] = os.path.abspath(os.path.normpath( - os.path.join(os.path.dirname(filename), context[path])) + if path in settings: + if settings[path] is not None and not isabs(settings[path]): + settings[path] = os.path.abspath(os.path.normpath( + os.path.join(os.path.dirname(filename), settings[path])) ) # if locales is not a list, make it one - locales = context['LOCALE'] + locales = settings['LOCALE'] if isinstance(locales, basestring): locales = [locales] @@ -108,11 +128,20 @@ def read_settings(filename=None): else: logger.warn("LOCALE option doesn't contain a correct value") - if not 'TIMEZONE' in context: + # If SITEURL is defined but FEED_DOMAIN isn't, set FEED_DOMAIN = SITEURL + if ('SITEURL' in settings) and (not 'FEED_DOMAIN' in settings): + settings['FEED_DOMAIN'] = settings['SITEURL'] + + # Warn if feeds are generated with both SITEURL & FEED_DOMAIN undefined + if (('FEED' in settings) or ('FEED_RSS' in settings)) and (not 'FEED_DOMAIN' in settings): + logger.warn("Since feed URLs should always be absolute, you should specify " + "FEED_DOMAIN in your settings. (e.g., 'FEED_DOMAIN = " + "http://www.example.com')") + + if not 'TIMEZONE' in settings: logger.warn("No timezone information specified in the settings. Assuming" " your timezone is UTC for feed generation. Check " "http://docs.notmyidea.org/alexis/pelican/settings.html#timezone " "for more information") - # set the locale - return context + return settings diff --git a/pelican/themes/notmyidea/static/css/main.css b/pelican/themes/notmyidea/static/css/main.css index 7534790f..28c98b99 100644 --- a/pelican/themes/notmyidea/static/css/main.css +++ b/pelican/themes/notmyidea/static/css/main.css @@ -26,8 +26,6 @@ body { text-align: left; } - - /* Headings */ h1 {font-size: 2em } h2 {font-size: 1.571em} /* 22px */ @@ -304,7 +302,7 @@ img.left, figure.left {float: right; margin: 0 0 2em 2em;} .social a[href*='digg.com'] {background-image: url('../images/icons/digg.png');} .social a[href*='facebook.com'] {background-image: url('../images/icons/facebook.png');} .social a[href*='last.fm'], .social a[href*='lastfm.'] {background-image: url('../images/icons/lastfm.png');} - .social a[href*='atom.xml'] {background-image: url('../images/icons/rss.png');} + .social a[type$='atom+xml'], .social a[type$='rss+xml'] {background-image: url('../images/icons/rss.png');} .social a[href*='twitter.com'] {background-image: url('../images/icons/twitter.png');} .social a[href*='linkedin.com'] {background-image: url('../images/icons/linkedin.png');} diff --git a/pelican/themes/notmyidea/templates/base.html b/pelican/themes/notmyidea/templates/base.html index 12086dc7..0fd388cf 100644 --- a/pelican/themes/notmyidea/templates/base.html +++ b/pelican/themes/notmyidea/templates/base.html @@ -4,9 +4,9 @@ {% block title %}{{ SITENAME }}{%endblock%} - + {% if FEED_RSS %} - + {% endif %}