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 = _('%s ' \ - '(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")), +)