diff --git a/sites/scrapy.org/scrapyorg/article/models.py b/sites/scrapy.org/scrapyorg/article/models.py index fd73b660f..75011fba1 100644 --- a/sites/scrapy.org/scrapyorg/article/models.py +++ b/sites/scrapy.org/scrapyorg/article/models.py @@ -22,12 +22,15 @@ class Article(models.Model): 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 @@ -46,7 +49,7 @@ class Article(models.Model): def __unicode__(self): return self.title - + # ugly, but django-admin isn't very versatile right now def position_link(self): return _("%(position)s (Up" \ @@ -54,10 +57,20 @@ class Article(models.Model): { "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", "updated") - list_filter = ("main", "created") + list_display = ("title", "main", "position_link", "publish_link", + "updated") + list_filter = ("main", "created", "publish") class Meta: verbose_name = _("article") diff --git a/sites/scrapy.org/scrapyorg/article/templatetags/article_tags.py b/sites/scrapy.org/scrapyorg/article/templatetags/article_tags.py index 25622bfb3..5b8871dd9 100644 --- a/sites/scrapy.org/scrapyorg/article/templatetags/article_tags.py +++ b/sites/scrapy.org/scrapyorg/article/templatetags/article_tags.py @@ -39,7 +39,7 @@ class LoadArticlesNode(template.Node): self.var_name = var_name def render(self, context): - articles = Article.objects.all() + articles = Article.objects.filter(publish=True) if self.only_main: articles = articles.filter(main=True) diff --git a/sites/scrapy.org/scrapyorg/article/urls.py b/sites/scrapy.org/scrapyorg/article/urls.py index 4eca6ad64..3ba06ba9b 100644 --- a/sites/scrapy.org/scrapyorg/article/urls.py +++ b/sites/scrapy.org/scrapyorg/article/urls.py @@ -6,4 +6,5 @@ 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), ) diff --git a/sites/scrapy.org/scrapyorg/article/views.py b/sites/scrapy.org/scrapyorg/article/views.py index e461e2345..999ec9111 100644 --- a/sites/scrapy.org/scrapyorg/article/views.py +++ b/sites/scrapy.org/scrapyorg/article/views.py @@ -16,3 +16,9 @@ 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/")