diff options
Diffstat (limited to 'app/pages')
-rw-r--r-- | app/pages/admin.py | 18 | ||||
-rw-r--r-- | app/pages/models.py | 90 | ||||
-rw-r--r-- | app/pages/views.py | 2 |
3 files changed, 17 insertions, 93 deletions
diff --git a/app/pages/admin.py b/app/pages/admin.py index 66e4d8f..844007e 100644 --- a/app/pages/admin.py +++ b/app/pages/admin.py @@ -1,13 +1,22 @@ from django.contrib import admin +from django import forms from django.forms import Textarea from django.db import models -''' +from pages.models import Page + +class PageEntryForm(forms.ModelForm): + class Meta: + model = Page + fields = '__all__' + widgets = { + 'body_markdown': forms.Textarea(attrs={'rows': 50, 'cols': 100}), + } + class PageAdmin(admin.ModelAdmin): - formfield_overrides = { - models.TextField: {'widget': Textarea(attrs={'rows': 25, 'cols': 40})}, - } + form = PageEntryForm + list_display = ('title', 'slug',) search_fields = ['title', 'body_markdown'] prepopulated_fields = {"slug": ('title',)} @@ -23,4 +32,3 @@ class PageAdmin(admin.ModelAdmin): ) admin.site.register(Page, PageAdmin) -''' diff --git a/app/pages/models.py b/app/pages/models.py index 3ef1a71..832b958 100644 --- a/app/pages/models.py +++ b/app/pages/models.py @@ -1,16 +1,8 @@ from django.db import models from django.contrib.sitemaps import Sitemap import markdown - - -import os -import yaml -from django.conf import settings -from django.template.loader import render_to_string -from django.template import Context from mdx_attr_list.mdx_attr_list import AttrListExtension - def markdown_processor(txt): md = markdown.Markdown( extensions=[AttrListExtension(),'footnotes',], @@ -18,7 +10,7 @@ def markdown_processor(txt): safe_mode=False ) return md.convert(txt) -''' + class Page(models.Model): title = models.CharField(max_length=200) slug = models.SlugField() @@ -36,7 +28,7 @@ class Page(models.Model): #run markdown self.body_html = markdown_processor(self.body_markdown) super(Page, self).save() -''' + class PageSitemap(Sitemap): changefreq = "never" @@ -44,80 +36,4 @@ class PageSitemap(Sitemap): protocol = "https" def items(self): - p = PageGenerator(settings.PROJ_ROOT + '_pages') - return p.objects(include_in_sitemap=True) - #return Page.objects.all() - - -class PageGenerator(object): - - def __init__(self, path, *args, **kwargs): - self._objects = [] - for (dirpath, dirnames, filenames) in os.walk(path): - self.dirpath = dirpath - self.file_list = filter(lambda item: not (item.startswith('.') or item.endswith('~') or item.endswith('.md')), filenames) - self.get_files() - - def get_files(self): - for f in self.file_list: - p = Page(self.dirpath + '/' + f) - self._objects.append(p) - - def objects(self, *args, **kwargs): - filtered_list = [] - if kwargs: - for item in self._objects: - found = False - for k, v in kwargs.items(): - if getattr(item, k) == v and not found: - found = True - filtered_list.append(item) - elif getattr(item, k) != v and found: - filtered_list.remove(item) - return filtered_list - return self._objects - - def write_files(self): - for obj in self.objects(): - c = Context({'object': obj, 'SITE_URL': settings.SITE_URL}) - t = render_to_string(["details/%s.html" % obj.template], c) - s = render_to_string('details/page.txt', c) - _FileWriter('', t, ext="html", filename=obj.slug) - _FileWriter('', s, ext="txt", filename=obj.slug) - - -class _FileWriter(object): - """ - Given a path and text object; write the page to disc - """ - def __init__(self, path, text_object, ext='html', filename='index'): - self.path = '%s%s' % (settings.FLATFILES_ROOT, path) - if not os.path.isdir(self.path): - os.makedirs(self.path) - fpath = '%s%s.%s' % (self.path, filename, ext) - self.write(fpath, text_object) - - def write(self, fpath, text_object): - file = open(fpath, 'wb') - file.write(text_object.encode('utf-8')) - file.close() - - -class _FileLoader(object): - - def __init__(self, filename, *args, **kwargs): - self.filename = filename - metadata = self.read() - for k, v in metadata.items(): - setattr(self, k, v) - if self.body_markdown: - self.body_html = markdown_processor(self.body_markdown) - - def read(self): - with open(self.filename, "r", encoding="utf-8") as f: - contents = f.read() - metayaml, self.body_markdown = contents.split('\n---') - return yaml.load(metayaml) - -class Page(_FileLoader): - pass + return Page.objects.all() diff --git a/app/pages/views.py b/app/pages/views.py index e933399..934cb40 100644 --- a/app/pages/views.py +++ b/app/pages/views.py @@ -3,6 +3,6 @@ from django.template import RequestContext from pages.models import Page def page(request, slug): - obj = "" #get_object_or_404(Page, slug__exact=slug) + obj = get_object_or_404(Page, slug__exact=slug) context = {'object': obj, } return render_to_response(["details/%s.html" % obj.slug, 'details/page.html'], context, context_instance=RequestContext(request)) |