mirror of
https://github.com/scrapy/scrapy.git
synced 2025-02-25 07:24:09 +00:00
--HG-- rename : sites/scrapy.org/scrapyorg/apps/article/__init__.py => sites/scrapy.org/scrapyorg/article/__init__.py rename : sites/scrapy.org/scrapyorg/apps/article/models.py => sites/scrapy.org/scrapyorg/article/models.py rename : sites/scrapy.org/scrapyorg/apps/article/templatetags/__init__.py => sites/scrapy.org/scrapyorg/article/templatetags/__init__.py rename : sites/scrapy.org/scrapyorg/apps/article/templatetags/article_tags.py => sites/scrapy.org/scrapyorg/article/templatetags/article_tags.py rename : sites/scrapy.org/scrapyorg/apps/article/urls.py => sites/scrapy.org/scrapyorg/article/urls.py rename : sites/scrapy.org/scrapyorg/apps/article/views.py => sites/scrapy.org/scrapyorg/article/views.py rename : sites/scrapy.org/scrapyorg/apps/blog/__init__.py => sites/scrapy.org/scrapyorg/blog/__init__.py rename : sites/scrapy.org/scrapyorg/apps/blog/feeds.py => sites/scrapy.org/scrapyorg/blog/feeds.py rename : sites/scrapy.org/scrapyorg/apps/blog/models.py => sites/scrapy.org/scrapyorg/blog/models.py rename : sites/scrapy.org/scrapyorg/apps/blog/templatetags/__init__.py => sites/scrapy.org/scrapyorg/blog/templatetags/__init__.py rename : sites/scrapy.org/scrapyorg/apps/blog/templatetags/lastblogentry.py => sites/scrapy.org/scrapyorg/blog/templatetags/lastblogentry.py rename : sites/scrapy.org/scrapyorg/apps/blog/urls.py => sites/scrapy.org/scrapyorg/blog/urls.py rename : sites/scrapy.org/scrapyorg/apps/download/__init__.py => sites/scrapy.org/scrapyorg/download/__init__.py rename : sites/scrapy.org/scrapyorg/apps/download/models.py => sites/scrapy.org/scrapyorg/download/models.py rename : sites/scrapy.org/scrapyorg/apps/download/templatetags/__init__.py => sites/scrapy.org/scrapyorg/download/templatetags/__init__.py rename : sites/scrapy.org/scrapyorg/apps/download/templatetags/download_tags.py => sites/scrapy.org/scrapyorg/download/templatetags/download_tags.py rename : sites/scrapy.org/scrapyorg/apps/download/urls.py => sites/scrapy.org/scrapyorg/download/urls.py rename : sites/scrapy.org/scrapyorg/apps/download/views.py => sites/scrapy.org/scrapyorg/download/views.py rename : sites/scrapy.org/scrapyorg/apps/link/__init__.py => sites/scrapy.org/scrapyorg/link/__init__.py rename : sites/scrapy.org/scrapyorg/apps/link/models.py => sites/scrapy.org/scrapyorg/link/models.py rename : sites/scrapy.org/scrapyorg/apps/link/templatetags/__init__.py => sites/scrapy.org/scrapyorg/link/templatetags/__init__.py rename : sites/scrapy.org/scrapyorg/apps/link/templatetags/link_tags.py => sites/scrapy.org/scrapyorg/link/templatetags/link_tags.py rename : sites/scrapy.org/scrapyorg/apps/link/urls.py => sites/scrapy.org/scrapyorg/link/urls.py rename : sites/scrapy.org/scrapyorg/apps/link/views.py => sites/scrapy.org/scrapyorg/link/views.py rename : sites/scrapy.org/scrapyorg/static/images/box-borders-bottom.gif => sites/scrapy.org/static/images/box-borders-bottom.gif rename : sites/scrapy.org/scrapyorg/static/images/box-borders-bottom.png => sites/scrapy.org/static/images/box-borders-bottom.png rename : sites/scrapy.org/scrapyorg/static/images/box-borders-top.png => sites/scrapy.org/static/images/box-borders-top.png rename : sites/scrapy.org/scrapyorg/static/images/footer-bg.jpg => sites/scrapy.org/static/images/footer-bg.jpg rename : sites/scrapy.org/scrapyorg/static/images/icon-arrow.gif => sites/scrapy.org/static/images/icon-arrow.gif rename : sites/scrapy.org/scrapyorg/static/images/icon-author.gif => sites/scrapy.org/static/images/icon-author.gif rename : sites/scrapy.org/scrapyorg/static/images/logo.jpg => sites/scrapy.org/static/images/logo.jpg rename : sites/scrapy.org/scrapyorg/static/images/main-bg.jpg => sites/scrapy.org/static/images/main-bg.jpg rename : sites/scrapy.org/scrapyorg/static/style/style.css => sites/scrapy.org/static/style/style.css rename : sites/scrapy.org/scrapyorg/templates/base.html => sites/scrapy.org/templates/base.html rename : sites/scrapy.org/scrapyorg/templates/base_home.html => sites/scrapy.org/templates/base_home.html rename : sites/scrapy.org/scrapyorg/templates/base_weblog.html => sites/scrapy.org/templates/base_weblog.html rename : sites/scrapy.org/scrapyorg/templates/blog/entry_archive.html => sites/scrapy.org/templates/blog/entry_archive.html rename : sites/scrapy.org/scrapyorg/templates/blog/entry_archive_day.html => sites/scrapy.org/templates/blog/entry_archive_day.html rename : sites/scrapy.org/scrapyorg/templates/blog/entry_archive_month.html => sites/scrapy.org/templates/blog/entry_archive_month.html rename : sites/scrapy.org/scrapyorg/templates/blog/entry_archive_year.html => sites/scrapy.org/templates/blog/entry_archive_year.html rename : sites/scrapy.org/scrapyorg/templates/blog/entry_detail.html => sites/scrapy.org/templates/blog/entry_detail.html rename : sites/scrapy.org/scrapyorg/templates/home.html => sites/scrapy.org/templates/home.html extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%4017
66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
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
|
|
<a href='http://en.wikipedia.org/wiki/ReStructuredText'>
|
|
Read more</a>""")
|
|
|
|
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)
|
|
|
|
|
|
# automatic dates
|
|
created = models.DateTimeField(core=True, editable=False)
|
|
updated = models.DateTimeField(core=True, editable=False)
|
|
|
|
|
|
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 (<a href='/article/%(id)s/position/up/'>Up</a>" \
|
|
" | <a href='/article/%(id)s/position/down/'>Down</a>)") % \
|
|
{ "position": self.position, "id": self.id }
|
|
position_link.short_description = u"position"
|
|
position_link.allow_tags = True
|
|
|
|
class Admin:
|
|
list_display = ("title", "main", "position_link", "updated")
|
|
list_filter = ("main", "created")
|
|
|
|
class Meta:
|
|
verbose_name = _("article")
|
|
verbose_name_plural = _("articles")
|
|
ordering = [ "-position", ]
|