Add settings to change the URL's and SAVE_AS paths

Example usage:

* ARTICLE_URL = 'posts/{date:%Y}/{date:%b}/{date:%d}/{slug}/'
* ARTICLE_SAVE_AS = 'posts/{date:%Y}/{date:%b}/{date:%d}/{slug}/index.html'

This removes CLEAN_URLS and ARTICLE_PERMALINK_STRUCTURE because these
new settings can produce the same result.
This commit is contained in:
Kyle Fuller 2011-12-23 22:01:32 +00:00
commit a39787c1a2
4 changed files with 82 additions and 60 deletions

View file

@ -24,6 +24,7 @@ class Page(object):
if not settings:
settings = _DEFAULT_CONFIG
self.settings = settings
self._content = content
self.translations = []
@ -55,29 +56,6 @@ class Page(object):
if not hasattr(self, 'slug') and hasattr(self, 'title'):
self.slug = slugify(self.title)
# create save_as from the slug (+lang)
if not hasattr(self, 'save_as') and hasattr(self, 'slug'):
if self.in_default_lang:
if settings.get('CLEAN_URLS', False):
self.save_as = '%s/index.html' % self.slug
else:
self.save_as = '%s.html' % self.slug
clean_url = '%s/' % self.slug
else:
if settings.get('CLEAN_URLS', False):
self.save_as = '%s-%s/index.html' % (self.slug, self.lang)
else:
self.save_as = '%s-%s.html' % (self.slug, self.lang)
clean_url = '%s-%s/' % (self.slug, self.lang)
# change the save_as regarding the settings
if settings.get('CLEAN_URLS', False):
self.url = clean_url
elif hasattr(self, 'save_as'):
self.url = self.save_as
if filename:
self.filename = filename
@ -115,6 +93,30 @@ class Page(object):
if not hasattr(self, prop):
raise NameError(prop)
@property
def url_format(self):
return {
'slug': getattr(self, 'slug', ''),
'lang': getattr(self, 'lang', 'en'),
'date': getattr(self, 'date', datetime.now()),
'author': self.author,
'category': getattr(self, 'category', 'misc'),
}
@property
def url(self):
if self.in_default_lang:
return self.settings.get('PAGE_URL', 'pages/{slug}.html').format(**self.url_format)
return self.settings.get('PAGE_LANG_URL', 'pages/{slug}-{lang}.html').format(**self.url_format)
@property
def save_as(self):
if self.in_default_lang:
return self.settings.get('PAGE_SAVE_AS', 'pages/{slug}.html').format(**self.url_format)
return self.settings.get('PAGE_LANG_SAVE_AS', 'pages/{slug}-{lang}.html').format(**self.url_format)
@property
def content(self):
if hasattr(self, "_get_content"):
@ -138,6 +140,20 @@ class Page(object):
class Article(Page):
mandatory_properties = ('title', 'date', 'category')
@property
def url(self):
if self.in_default_lang:
return self.settings.get('ARTICLE_URL', '{slug}.html').format(**self.url_format)
return self.settings.get('ARTICLE_LANG_URL', '{slug}-{lang}.html').format(**self.url_format)
@property
def save_as(self):
if self.in_default_lang:
return self.settings.get('ARTICLE_SAVE_AS', '{slug}.html').format(**self.url_format)
return self.settings.get('ARTICLE_LANG_SAVE_AS', '{slug}-{lang}.html').format(**self.url_format)
class Quote(Page):
base_properties = ('author', 'date')

View file

@ -239,21 +239,6 @@ class ArticlesGenerator(Generator):
if not is_valid_content(article, f):
continue
add_to_url = u''
if 'ARTICLE_PERMALINK_STRUCTURE' in self.settings:
article_permalink_structure = self.settings['ARTICLE_PERMALINK_STRUCTURE']
article_permalink_structure = article_permalink_structure.lstrip('/').replace('%(', "%%(")
# try to substitute any python datetime directive
add_to_url = article.date.strftime(article_permalink_structure)
# try to substitute any article metadata in rest file
add_to_url = add_to_url % article.__dict__
add_to_url = [slugify(i) for i in add_to_url.split('/')]
add_to_url = os.path.join(*add_to_url)
article.url = urlparse.urljoin(add_to_url, article.url)
article.save_as = urlparse.urljoin(add_to_url, article.save_as)
if article.status == "published":
if hasattr(article, 'tags'):
for tag in article.tags:
@ -348,7 +333,7 @@ class PagesGenerator(Generator):
def generate_output(self, writer):
for page in chain(self.translations, self.pages):
writer.write_file('pages/%s' % page.save_as, self.get_template('page'),
writer.write_file(page.save_as, self.get_template('page'),
self.context, page=page,
relative_urls = self.settings.get('RELATIVE_URLS'))

View file

@ -26,7 +26,14 @@ _DEFAULT_CONFIG = {'PATH': None,
'REVERSE_ARCHIVE_ORDER': False,
'REVERSE_CATEGORY_ORDER': False,
'DELETE_OUTPUT_DIRECTORY': False,
'CLEAN_URLS': False, # use /blah/ instead /blah.html in urls
'ARTICLE_URL': '{slug}.html',
'ARTICLE_SAVE_AS': '{slug}.html',
'ARTICLE_LANG_URL': '{slug}-{lang}.html',
'ARTICLE_LANG_SAVE_AS': '{slug}-{lang}.html',
'PAGE_URL': 'pages/{slug}.html',
'PAGE_SAVE_AS': 'pages/{slug}.html',
'PAGE_LANG_URL': 'pages/{slug}-{lang}.html',
'PAGE_LANG_SAVE_AS': 'pages/{slug}-{lang}.html',
'RELATIVE_URLS': True,
'DEFAULT_LANG': 'en',
'TAG_CLOUD_STEPS': 4,