diff --git a/sites/scrapy.org/scrapyorg/article/models.py b/sites/scrapy.org/scrapyorg/article/models.py
deleted file mode 100644
index d0e560d69..000000000
--- a/sites/scrapy.org/scrapyorg/article/models.py
+++ /dev/null
@@ -1,79 +0,0 @@
-from datetime import datetime
-
-from django.db import models
-from django.template.defaultfilters import slugify
-from django.utils.translation import ugettext_lazy as _
-
-
-REST_HELP_TEXT = _("""ReST markup language allowed
-
- Read more""")
-
-MAIN_HELP_TEXT = _("Useful to filter articles, like those public on homepage")
-
-
-class Article(models.Model):
- title = models.CharField(_("title"), max_length=256, core=True,
- blank=False)
- slug = models.SlugField(_("slug"), prepopulate_from=("title",),
- editable=False)
- text = models.TextField(_("text"), core=True, help_text=REST_HELP_TEXT)
- main = models.BooleanField(_("main"), core=True, blank=False,
- default=False, help_text=MAIN_HELP_TEXT)
- position = models.IntegerField(_("position"), core=True, blank=False,
- default=0)
- publish = models.BooleanField(_("publish"), core=True, default=False)
-
- # automatic dates
- created = models.DateTimeField(core=True, editable=False)
- updated = models.DateTimeField(core=True, editable=False)
-
- def toggle_publish(self):
- self.publish = not self.publish
- self.save()
-
- def position_up(self):
- self.position += 1
- self.save()
-
- def position_down(self):
- self.position -= 1
- self.save()
-
- def save(self):
- if not self.id:
- self.created = datetime.now()
- self.updated = datetime.now()
- self.slug = slugify(self.title)
- super(Article, self).save()
-
- def __unicode__(self):
- return self.title
-
- # ugly, but django-admin isn't very versatile right now
- def position_link(self):
- return _("%(position)s (Up" \
- " | Down)") % \
- { "position": self.position, "id": self.id }
- position_link.short_description = u"position"
- position_link.allow_tags = True
-
- def publish_link(self):
- img_url = "/media/img/admin/icon-%s.gif" % \
- (self.publish and "yes" or "no")
- html = _('
' \
- '(Toggle)')
- return html % (_(str(self.publish)), self.id)
- publish_link.short_description = u"publish"
- publish_link.allow_tags = True
-
- class Admin:
- list_display = ("title", "main", "position_link", "publish_link",
- "updated")
- list_filter = ("main", "created", "publish")
- save_on_top = True
-
- class Meta:
- verbose_name = _("article")
- verbose_name_plural = _("articles")
- ordering = [ "-position", ]
diff --git a/sites/scrapy.org/scrapyorg/article/templatetags/__init__.py b/sites/scrapy.org/scrapyorg/article/templatetags/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/sites/scrapy.org/scrapyorg/article/templatetags/article_tags.py b/sites/scrapy.org/scrapyorg/article/templatetags/article_tags.py
deleted file mode 100644
index 5b8871dd9..000000000
--- a/sites/scrapy.org/scrapyorg/article/templatetags/article_tags.py
+++ /dev/null
@@ -1,47 +0,0 @@
-from django import template
-
-from scrapyorg.lib.templatetags import *
-
-from scrapyorg.article.models import Article
-
-
-register = template.Library()
-
-
-@register.tag(name="load_main_articles")
-def do_load_main_articles(parser, token):
- return do_load(parser, token, True)
-
-
-@register.tag(name="load_last_articles")
-def do_load_last_articles(parser, token):
- return do_load(parser, token)
-
-
-def do_load(parser, token, only_main=False):
- syntax_msg = 'Syntax: %s "COUNT" as "VAR_NAME"'
-
- try:
- tag, count, _as, var_name = token.split_contents()
-
- if not is_string(count) or not is_string(var_name):
- raise_syntax(syntax_msg % tag)
- count = int(unquoute(count))
- except:
- raise_syntax(syntax_msg % token.split_contents()[0])
- return LoadArticlesNode(count, unquoute(var_name), only_main)
-
-
-class LoadArticlesNode(template.Node):
- def __init__(self, count, var_name, only_main=False):
- self.only_main = only_main
- self.count = count
- self.var_name = var_name
-
- def render(self, context):
- articles = Article.objects.filter(publish=True)
- if self.only_main:
- articles = articles.filter(main=True)
-
- context[self.var_name] = articles[:self.count]
- return ''
diff --git a/sites/scrapy.org/scrapyorg/article/urls.py b/sites/scrapy.org/scrapyorg/article/urls.py
index 3ba06ba9b..8c54379ae 100644
--- a/sites/scrapy.org/scrapyorg/article/urls.py
+++ b/sites/scrapy.org/scrapyorg/article/urls.py
@@ -4,7 +4,6 @@ from scrapyorg.article.views import *
urlpatterns = patterns('',
- (r"^(?P\d+)/position/up/$", position_up),
- (r"^(?P\d+)/position/down/$", position_down),
- (r"^(?P\d+)/publish/toggle/$", publish_toggle),
+ (r"^$", render_template, { "path": "home" }),
+ (r"(?P.*)/", render_template),
)
diff --git a/sites/scrapy.org/scrapyorg/article/views.py b/sites/scrapy.org/scrapyorg/article/views.py
index 999ec9111..3a8a301f1 100644
--- a/sites/scrapy.org/scrapyorg/article/views.py
+++ b/sites/scrapy.org/scrapyorg/article/views.py
@@ -1,24 +1,21 @@
-from django.shortcuts import get_object_or_404
-from django.http import HttpResponseRedirect
-from django.contrib.admin.views.decorators import staff_member_required
+from os.path import join
-from scrapyorg.article.models import Article
+from django.template import TemplateDoesNotExist
+from django.template.context import RequestContext
+from django.shortcuts import render_to_response
+from django.http import Http404
-@staff_member_required
-def position_up(request, article_id):
- article = get_object_or_404(Article, pk=article_id)
- article.position_up()
- return HttpResponseRedirect("/admin/article/article/")
+ARTICLES_TEMPLATES_DIR = "articles"
-@staff_member_required
-def position_down(request, article_id):
- article = get_object_or_404(Article, pk=article_id)
- article.position_down()
- return HttpResponseRedirect("/admin/article/article/")
-@staff_member_required
-def publish_toggle(request, article_id):
- article = get_object_or_404(Article, pk=article_id)
- article.toggle_publish()
- return HttpResponseRedirect("/admin/article/article/")
+def render_template(request, path):
+ if not path.endswith(".html"):
+ path = path + ".html"
+ path = join(ARTICLES_TEMPLATES_DIR, path)
+
+ try:
+ c = RequestContext(request)
+ return render_to_response(path, context_instance=c)
+ except TemplateDoesNotExist, e:
+ raise Http404("Article does not exists")
diff --git a/sites/scrapy.org/scrapyorg/settings.py b/sites/scrapy.org/scrapyorg/settings.py
index 71caa0155..044ceb180 100644
--- a/sites/scrapy.org/scrapyorg/settings.py
+++ b/sites/scrapy.org/scrapyorg/settings.py
@@ -62,7 +62,6 @@ MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
- 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)
ROOT_URLCONF = 'scrapyorg.urls'
diff --git a/sites/scrapy.org/scrapyorg/urls.py b/sites/scrapy.org/scrapyorg/urls.py
index 97316b1a0..87ac50b54 100644
--- a/sites/scrapy.org/scrapyorg/urls.py
+++ b/sites/scrapy.org/scrapyorg/urls.py
@@ -4,12 +4,9 @@ from django.conf import settings
urlpatterns = patterns('',
- (r"^$", direct_to_template, { "template": "home.html" }),
- (r"^article/", include("scrapyorg.article.urls")),
(r"^weblog/", include("scrapyorg.blog.urls")),
# admin
- (r"^admin/article/article/", include("scrapyorg.article.urls")),
(r"^admin/download/downloadlink/", include("scrapyorg.download.urls")),
(r"^admin/", include("django.contrib.admin.urls")),
)
@@ -19,3 +16,8 @@ if settings.DEBUG: # devel
urlpatterns += patterns('',
(r'^%s/(?P.*)$' % settings.MEDIA_URL[1:], 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
)
+
+# last resort, it's an article
+urlpatterns += patterns('',
+ (r"", include("scrapyorg.article.urls")),
+)