Changeset 55

Show
Ignore:
Timestamp:
03/02/08 19:47:45 (9 months ago)
Author:
nobu
Message:

fixed #17 コメントのカウント数を一覧に表示

  • これに伴ってDBの構造も変更。
  • Comment, TrackBackにpre_deleteのフックを追加。
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/blog/forms.py

    r33 r55  
    3535    class Meta: 
    3636        model = Comment 
    37         exclude = ('entry', 'is_active') 
     37        fields = ('name', 'email', 'url', 'description') 
    3838 
    3939 
     
    4545    class Meta: 
    4646        model = TrackBack 
    47         exclude = ('is_active',
     47        fields = ('entry', 'blog_name', 'title', 'url', 'excerpt'
    4848     
    4949    def clean(self): 
  • trunk/blog/models.py

    r42 r55  
    77from django.db.models import signals 
    88from django.utils.translation import ugettext_lazy as _ 
    9 from blog.receivers import post_save_entry, post_save_comment, post_save_trackback 
     9from blog.receivers import post_save_entry, post_save_comment, pre_delete_comment,\ 
     10                           post_save_trackback, pre_delete_trackback 
    1011 
    1112 
     
    4041    slug = models.SlugField(_(u'slug')) 
    4142    description = models.TextField(_(u'description')) 
     43    comments_count = models.IntegerField(_(u'comments count'), editable=False, default=0) 
     44    trackbacks_count = models.IntegerField(_(u'trackbacks count'), editable=False, default=0) 
    4245    created_at = models.DateTimeField(_(u'created at'), editable=False, default=datetime.now) 
    4346    updated_at = models.DateTimeField(_(u'updated at'), editable=False) 
     
    9497            self.published_at = now 
    9598            self.published_now = True 
    96         super(Entry, self).save(raw=raw) 
     99        self.direct_save(raw=raw) 
    97100 
    98101    def delete(self): 
     
    101104        self.save() 
    102105 
    103     @property 
    104     def comments(self): 
    105         return self.comment_set.filter(is_active__exact=True) 
    106  
    107     @property 
    108     def trackbacks(self): 
    109         return self.trackback_set.filter(is_active__exact=True) 
     106    def direct_save(self, raw=False): 
     107        super(Entry, self).save(raw=raw) 
    110108 
    111109 
     
    120118    description = models.TextField(_(u'description')) 
    121119    created_at = models.DateTimeField(_(u'created at'), editable=False, default=datetime.now) 
    122     updated_at = models.DateTimeField(_(u'updated at'), editable=False) 
    123     is_active = models.BooleanField(_(u'is active'), default=True) 
    124120     
    125121    class Meta: 
     
    130126    class Admin: 
    131127        ordering = ('-created_at',) 
    132         list_display = ('name', 'entry', 'email', 'url', 'created_at', 'updated_at', 'is_active'
     128        list_display = ('name', 'entry', 'email', 'url', 'created_at'
    133129        fields = ( 
    134130            (None, { 
     
    139135                'fields': ('email', 'url'), 
    140136            }), 
    141             ('Advanced options', { 
    142                 'classes': 'collapse', 
    143                 'fields': ('is_active',) 
    144             }) 
    145137        ) 
    146         list_filter = ('is_active',) 
    147138        search_fields = ('^name', 'email', 'url') 
    148139 
     
    152143    def get_absolute_url(self): 
    153144        return self.entry.get_absolute_url() 
    154  
    155     def save(self, raw=False): 
    156         self.updated_at = datetime.now() 
    157         super(Comment, self).save(raw=raw) 
    158      
    159     def delete(self): 
    160         self.is_active = False 
    161         self.save() 
    162145 
    163146 
     
    172155    excerpt = models.TextField(_(u'excerpt'), blank=True) 
    173156    created_at = models.DateTimeField(_(u'created at'), editable=False, default=datetime.now) 
    174     updated_at = models.DateTimeField(_(u'updated at'), editable=False) 
    175     is_active = models.BooleanField(_(u'is active'), default=True) 
    176157     
    177158    class Meta: 
     
    184165    class Admin: 
    185166        ordering = ('-created_at',) 
    186         list_display = ('blog_name', 'title', 'url', 'created_at', 'updated_at', 'is_active'
     167        list_display = ('blog_name', 'title', 'url', 'created_at'
    187168        list_display_links = ('url',) 
    188         fields = ( 
    189             (None, { 
    190                 'fields': ('entry', 'blog_name', 'title', 'url', 'excerpt'), 
    191             }), 
    192             ('Advanced options', { 
    193                 'classes': 'collapse', 
    194                 'fields': ('is_active',) 
    195             }) 
    196         ) 
    197         list_filter = ('is_active',) 
    198169        search_fields = ('^blog_name', '^title', 'url') 
    199170     
     
    204175        return self.entry.get_absolute_url() 
    205176     
    206     def save(self, raw=False): 
    207         self.updated_at = datetime.now() 
    208         super(TrackBack, self).save(raw=raw) 
    209  
    210     def delete(self): 
    211         self.is_active = False 
    212         self.save() 
    213  
    214177 
    215178class PingServer(models.Model): 
     
    254217dispatcher.connect(receiver=post_save_entry, signal=signals.post_save, sender=Entry) 
    255218dispatcher.connect(receiver=post_save_comment, signal=signals.post_save, sender=Comment) 
     219dispatcher.connect(receiver=pre_delete_comment, signal=signals.pre_delete, sender=Comment) 
    256220dispatcher.connect(receiver=post_save_trackback, signal=signals.post_save, sender=TrackBack) 
     221dispatcher.connect(receiver=pre_delete_trackback, signal=signals.pre_delete, sender=TrackBack) 
  • trunk/blog/receivers.py

    r53 r55  
    152152    blog.models.Comment post save hook. 
    153153    """ 
     154    #   increment parent comments count if created. 
     155    if created: 
     156        instance.entry.comments_count += 1 
     157        instance.entry.direct_save() 
     158 
     159    #   nothing to do if raw save or updated. 
    154160    if raw or not created: 
    155161        return 
     162 
     163    #   send mail to admins. 
    156164    c = Context({ 
    157165        'obj': instance, 
     
    162170 
    163171 
     172def pre_delete_comment(instance): 
     173    """ 
     174    blog.models.Comment pre delete hook. 
     175    """ 
     176    entry = instance.entry 
     177    if entry.comments_count > 0: 
     178        entry.comments_count -= 1 
     179        entry.direct_save() 
     180 
     181 
    164182def post_save_trackback(instance, created, raw, **kwargs): 
    165183    """ 
    166184    blog.models.TrackBack post save hook. 
    167185    """ 
     186    #   increment parent comments count if created. 
     187    if created: 
     188        instance.entry.trackbacks_count += 1 
     189        instance.entry.direct_save() 
     190 
     191    #   nothing to do if raw save or updated. 
    168192    if raw or not created: 
    169193        return 
     194 
     195    #   send mail to admins. 
    170196    c = Context({ 
    171197        'obj': instance, 
     
    174200    t = loader.get_template('blog/add_trackback_mail.txt') 
    175201    mail_admins(_(u'new track back has been added.'), t.render(c)) 
     202 
     203 
     204def pre_delete_trackback(instance): 
     205    """ 
     206    blog.models.Comment pre delete hook. 
     207    """ 
     208    entry = instance.entry 
     209    if entry.trackbacks_count > 0: 
     210        entry.trackbacks_count -= 1 
     211        entry.direct_save() 
  • trunk/blog/templates/blog/entry_detail.html

    r39 r55  
    1515            <dt>{% trans "Posted at" %}:&nbsp;</dt> 
    1616            {% if obj.is_published %} 
     17            {% spaceless %} 
    1718            <dd>{{ obj.published_at|date:"Y/m/d H:i:s" }}</dd> 
     19            <dd> 
     20                <a href="#comments">{% blocktrans count obj.comments_count as cnt %}{{ cnt }} Comment{% plural %}{{ cnt }} Comments{% endblocktrans %}</a> 
     21            </dd> 
     22            <dd> 
     23                <a href="#trackbacks">{% blocktrans count obj.trackbacks_count as cnt %}{{ cnt }} TrackBack{% plural %}{{ cnt }} TrackBacks{% endblocktrans %}</a> 
     24            </dd> 
     25            {% endspaceless %} 
    1826            {% else %} 
    1927            <dd>{% trans "not published." %}</dd> 
     
    3846 
    3947<div id="trackbacks" class="content-box"> 
    40     <h3>{% trans "TrackBack" %}</h3> 
    41     {% if obj.trackbacks %} 
    42     {% for trackback in obj.trackbacks %} 
     48    <h3>{% trans "TrackBacks" %}</h3> 
     49    {% if obj.trackbacks_count %} 
     50    {% for trackback in obj.trackback_set.all %} 
    4351    <div class="response"> 
    4452        <h4> 
     
    6674<div id="comments" class="content-box"> 
    6775    <h3>{% trans "Comments" %}</h3> 
    68     {% if obj.comments %} 
    69     {% for comment in obj.comments %} 
     76    {% if obj.comments_count %} 
     77    {% for comment in obj.comment_set.all %} 
    7078    <div class="response"> 
    7179        {% if comment.url %} 
  • trunk/blog/templates/blog/entry_list.html

    r37 r55  
    1818            <dt>{% trans "Posted at" %}:&nbsp;</dt> 
    1919            {% if obj.is_published %} 
     20            {% spaceless %} 
    2021            <dd>{{ obj.published_at|date:"Y/m/d H:i:s" }}</dd> 
     22            <dd> 
     23                <a href="{{ obj.get_absolute_url }}#comments">{% blocktrans count obj.comments_count as cnt %}{{ cnt }} Comment{% plural %}{{ cnt }} Comments{% endblocktrans %}</a> 
     24            </dd> 
     25            <dd> 
     26                <a href="{{ obj.get_absolute_url }}#trackbacks">{% blocktrans count obj.trackbacks_count as cnt %}{{ cnt }} TrackBack{% plural %}{{ cnt }} TrackBacks{% endblocktrans %}</a> 
     27            </dd> 
     28            {% endspaceless %} 
    2129            {% else %} 
    2230            <dd>{% trans "not published." %}</dd> 
  • trunk/blog/templatetags/blogutils.py

    r37 r55  
    6060    def get_absolute_url(self): 
    6161        kwargs = { 
    62             'label' : self.label.lower(), 
     62            'label': self.label.lower(), 
    6363        } 
    6464        return reverse('blog_entry_tag', args=[self.label.lower()]) 
     
    128128                                    count=count)) 
    129129    return { 
    130         'title'         : u'Archives', 
    131         'id'            : u'archive-list'
    132         'obj_list'   : obj_list
     130        'id': u'archive-list', 
     131        'obj_list': obj_list
     132        'title': u'Archives'
    133133    } 
    134134 
     
    175175        obj_list = [] 
    176176    return { 
    177         'title'     : u'Categories', 
    178         'id'        : u'tag-list'
    179         'obj_list'  : obj_list
     177        'id': u'tag-list', 
     178        'obj_list': obj_list
     179        'title': u'Categories'
    180180    } 
    181181 
  • trunk/blog/tests.py

    r35 r55  
    7878                p = {} 
    7979            #   send request. 
    80             response = self.client.get(url % tag, p) 
     80            target = url % tag 
     81            response = self.client.get(target, p) 
    8182            #   check status code. 
    8283            self.assertEqual(response.status_code, status_code) 
     
    164165        """ 
    165166        #   target url (not published) 
    166         url = '/2008/02/07/testentry-1/' 
     167        url = '/2008/03/02/testentry-1/' 
    167168        #   send request. 
    168169        response = self.client.get(url) 
     
    178179                         u'Not found - %s' % SITE_NAME) 
    179180        #   target url (published) 
    180         url = '/2008/02/07/testentry-5/' 
     181        url = '/2008/03/02/testentry-2/' 
    181182        #   send request. 
    182183        response = self.client.get(url) 
     
    190191        #   check title. 
    191192        self.assertEqual(html.xpath('//head/title/text()')[0], 
    192                          u'\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc5 - %s' % SITE_NAME) 
     193                         u'\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc2 - %s' % SITE_NAME) 
    193194        #   check context. 
    194195        context = response.context[0] 
     
    209210        Test blog.views.entry_detail (comment) 
    210211        """ 
    211         url = '/2008/02/07/testentry-5/' 
     212        url = '/2008/03/02/testentry-2/' 
    212213        templates = (u'blog/entry_detail.html', u'blog/base.html', u'base.html') 
    213214        #   send request. 
     
    220221        #   check context. 
    221222        context = response.context[0] 
     223        #   check entry 
     224        self.assertTrue(context.has_key('obj')) 
     225        obj = context['obj'] 
     226        self.assertEqual(obj.comments_count, 12) 
    222227        #   ckeck form. 
    223228        self.assertTrue(context.has_key('form')) 
     
    292297        #   check status code. 
    293298        self.assertEqual(response.status_code, 200) 
     299        #   check context. 
     300        context = response.context[0] 
     301        #   check entry 
     302        self.assertTrue(context.has_key('obj')) 
     303        obj = context['obj'] 
     304        self.assertEqual(obj.comments_count, 13) 
    294305 
    295306 
     
    338349        Test blog.views.trackback_create. 
    339350        """ 
    340         url = '/2008/02/07/testentry-5/trackback/' 
    341         location = '/2008/02/07/testentry-5/' 
     351        url = '/2008/03/02/testentry-2/trackback/' 
     352        location = '/2008/03/02/testentry-2/' 
    342353        #   send request. 
    343354        response = self.client.get(url) 
     
    358369        #   check error code. 
    359370        self.assertEqual(xml.xpath('/response/error/text()')[0], '1') 
     371        #   FIXME: 
    360372 
    361373 
     
    364376        Test blog.views.archive_day. 
    365377        """ 
    366         url = '/2008/02/07/' 
     378        url = '/2008/03/02/' 
    367379        parameters = ( 
    368380            (None, 200), 
     
    386398            #   check title. 
    387399            self.assertEqual(html.xpath('//head/title/text()')[0], 
    388                              u'Archive@2008/02/07 - %s' % SITE_NAME) 
     400                             'Archive@2008/03/02 - %s' % SITE_NAME) 
    389401            #   check context 
    390402            context = response.context[0] 
     
    409421        Test blog.views.archive_month. 
    410422        """ 
    411         url = '/2008/02/' 
     423        url = '/2008/03/' 
    412424        parameters = ( 
    413425            (None, 200), 
     
    431443            #   check title. 
    432444            self.assertEqual(html.xpath('//head/title/text()')[0], 
    433                              u'Archive@2008/02 - %s' % SITE_NAME) 
     445                             u'Archive@2008/03 - %s' % SITE_NAME) 
    434446            #   check context 
    435447            context = response.context[0] 
  • trunk/common/models.py

    r16 r55  
    3030 
    3131    class Admin: 
    32         list_display = ('title', 'url', 'created_at', 'updated_at', 'navigation_enabled', 'is_active') 
     32        list_display = ('title', 'url', 'created_at', 'updated_at', 'navigation_enabled', 'is_published', 'is_active') 
    3333        fields = ( 
    3434            (None, { 
     
    4040            }), 
    4141        ) 
    42         list_filter = ('navigation_enabled', 'is_active',) 
     42        list_filter = ('navigation_enabled', 'is_published', 'is_active',) 
    4343        search_fields = ('url', 'title') 
    4444 
  • trunk/media/themes/default/css/styles.css

    r41 r55  
    436436div.info 
    437437{ 
    438     padding: .35em; 
     438    padding: .5em; 
    439439    padding-bottom: 0; 
    440440    border: 1px solid #e3e3e3; 
     
    446446    { 
    447447        margin: 0; 
    448         margin-bottom: .35em; 
     448        margin-bottom: .5em; 
    449449        padding: 0; 
    450450    } 
  • trunk/test_data.json

    r20 r55  
    1010            "is_superuser": 1,  
    1111            "is_staff": 1,  
    12             "last_login": "2008-02-07 17:50:54",  
     12            "last_login": "2008-03-02 19:30:04",  
    1313            "groups": [],  
    1414            "user_permissions": [],  
    15             "password": "sha1$3d0c7$64ef0e46406a28ff8af5be684e985a82c634fbdc",  
     15            "password": "sha1$8de57$6e5ff2ec36b141162c67761f4489a907bf4a4139",  
    1616            "email": "tester@example.com",  
    17             "date_joined": "2008-02-07 11:53:55" 
     17            "date_joined": "2008-03-02 19:08:24" 
     18        } 
     19    },  
     20    { 
     21        "pk": 1,  
     22        "model": "sites.site",  
     23        "fields": { 
     24            "domain": "example.com",  
     25            "name": "example.com" 
    1826        } 
    1927    },  
     
    2331        "fields": { 
    2432            "navigation_enabled": 1,  
    25             "title": "about",  
     33            "title": "About",  
    2634            "url": "\/about\/",  
    2735            "template_name": "",  
    28             "created_at": "2008-02-07 17:51:30",  
    29             "is_active": 1,  
    30             "updated_at": "2008-02-07 17:51:30",  
    31             "content": "\u30c6\u30b9\u30c8\u30a2\u30d0\u30a6\u30c8\r\n\u30c6\u30b9\u30c8\u30a2\u30d0\u30a6\u30c8\r\n\u30c6\u30b9\u30c8\u30a2\u30d0\u30a6\u30c8",  
     36            "created_at": "2008-03-02 19:30:33",  
     37            "is_active": 1,  
     38            "updated_at": "2008-03-02 19:30:33",  
     39            "content": "About\r\nAbout\r\nAbout",  
    3240            "is_published": 1 
    3341        } 
     
    3846        "fields": { 
    3947            "navigation_enabled": 1,  
    40             "title": "not published",  
     48            "title": "Not Published",  
    4149            "url": "\/notpublished\/",  
    4250            "template_name": "",  
    43             "created_at": "2008-02-07 17:52:40",  
    44             "is_active": 1,  
    45             "updated_at": "2008-02-07 17:52:40",  
    46             "content": "\u898b\u305b\u306a\u3044\u30da\u30fc\u30b8\r\n\u898b\u305b\u306a\u3044\u30da\u30fc\u30b8\r\n\u898b\u305b\u306a\u3044\u30da\u30fc\u30b8\r\n\u898b\u305b\u306a\u3044\u30da\u30fc\u30b8\r\n\u898b\u305b\u306a\u3044\u30da\u30fc\u30b8\r\n",  
    47             "is_published": 0 
     51            "created_at": "2008-03-02 19:31:01",  
     52            "is_active": 1,  
     53            "updated_at": "2008-03-02 19:31:01",  
     54            "content": "Not Published\r\nNot Published\r\nNot Published",  
     55            "is_published": 0 
     56        } 
     57    },  
     58    { 
     59        "pk": 150,  
     60        "model": "blog.entry",  
     61        "fields": { 
     62            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc150\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc150\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc150",  
     63            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc150",  
     64            "created_at": "2008-03-02 19:11:34",  
     65            "tags": [ 
     66                2,  
     67                4,  
     68                1,  
     69                3 
     70            ],  
     71            "is_active": 1,  
     72            "updated_at": "2008-03-02 19:11:34",  
     73            "published_at": "2008-03-02 19:11:34",  
     74            "trackbacks_count": 0,  
     75            "comments_count": 6,  
     76            "slug": "testentry-150",  
     77            "is_published": 1 
     78        } 
     79    },  
     80    { 
     81        "pk": 146,  
     82        "model": "blog.entry",  
     83        "fields": { 
     84            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc146\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc146\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc146",  
     85            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc146",  
     86            "created_at": "2008-03-02 19:11:30",  
     87            "tags": [ 
     88                5,  
     89                6,  
     90                1 
     91            ],  
     92            "is_active": 1,  
     93            "updated_at": "2008-03-02 19:11:30",  
     94            "published_at": "2008-03-02 19:11:30",  
     95            "trackbacks_count": 0,  
     96            "comments_count": 8,  
     97            "slug": "testentry-146",  
     98            "is_published": 1 
     99        } 
     100    },  
     101    { 
     102        "pk": 145,  
     103        "model": "blog.entry",  
     104        "fields": { 
     105            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc145\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc145\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc145",  
     106            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc145",  
     107            "created_at": "2008-03-02 19:11:29",  
     108            "tags": [ 
     109                2,  
     110                5,  
     111                4,  
     112                6 
     113            ],  
     114            "is_active": 1,  
     115            "updated_at": "2008-03-02 19:11:29",  
     116            "published_at": "2008-03-02 19:11:29",  
     117            "trackbacks_count": 0,  
     118            "comments_count": 10,  
     119            "slug": "testentry-145",  
     120            "is_published": 1 
     121        } 
     122    },  
     123    { 
     124        "pk": 144,  
     125        "model": "blog.entry",  
     126        "fields": { 
     127            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc144\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc144\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc144",  
     128            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc144",  
     129            "created_at": "2008-03-02 19:11:28",  
     130            "tags": [ 
     131                2,  
     132                4,  
     133                6,  
     134                1 
     135            ],  
     136            "is_active": 1,  
     137            "updated_at": "2008-03-02 19:11:28",  
     138            "published_at": "2008-03-02 19:11:28",  
     139            "trackbacks_count": 0,  
     140            "comments_count": 0,  
     141            "slug": "testentry-144",  
     142            "is_published": 1 
     143        } 
     144    },  
     145    { 
     146        "pk": 141,  
     147        "model": "blog.entry",  
     148        "fields": { 
     149            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc141\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc141\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc141",  
     150            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc141",  
     151            "created_at": "2008-03-02 19:11:25",  
     152            "tags": [ 
     153                2,  
     154                5,  
     155                4,  
     156                1 
     157            ],  
     158            "is_active": 1,  
     159            "updated_at": "2008-03-02 19:11:25",  
     160            "published_at": "2008-03-02 19:11:25",  
     161            "trackbacks_count": 0,  
     162            "comments_count": 4,  
     163            "slug": "testentry-141",  
     164            "is_published": 1 
     165        } 
     166    },  
     167    { 
     168        "pk": 139,  
     169        "model": "blog.entry",  
     170        "fields": { 
     171            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc139\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc139\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc139",  
     172            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc139",  
     173            "created_at": "2008-03-02 19:11:23",  
     174            "tags": [ 
     175                2,  
     176                5,  
     177                6,  
     178                1,  
     179                3 
     180            ],  
     181            "is_active": 1,  
     182            "updated_at": "2008-03-02 19:11:23",  
     183            "published_at": "2008-03-02 19:11:23",  
     184            "trackbacks_count": 0,  
     185            "comments_count": 10,  
     186            "slug": "testentry-139",  
     187            "is_published": 1 
     188        } 
     189    },  
     190    { 
     191        "pk": 138,  
     192        "model": "blog.entry",  
     193        "fields": { 
     194            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc138\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc138\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc138",  
     195            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc138",  
     196            "created_at": "2008-03-02 19:11:21",  
     197            "tags": [ 
     198                5,  
     199                4,  
     200                6,  
     201                1 
     202            ],  
     203            "is_active": 1,  
     204            "updated_at": "2008-03-02 19:11:22",  
     205            "published_at": "2008-03-02 19:11:21",  
     206            "trackbacks_count": 0,  
     207            "comments_count": 6,  
     208            "slug": "testentry-138",  
     209            "is_published": 1 
     210        } 
     211    },  
     212    { 
     213        "pk": 137,  
     214        "model": "blog.entry",  
     215        "fields": { 
     216            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc137\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc137\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc137",  
     217            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc137",  
     218            "created_at": "2008-03-02 19:11:20",  
     219            "tags": [ 
     220                2,  
     221                5,  
     222                6,  
     223                1,  
     224                3 
     225            ],  
     226            "is_active": 1,  
     227            "updated_at": "2008-03-02 19:11:20",  
     228            "published_at": "2008-03-02 19:11:20",  
     229            "trackbacks_count": 0,  
     230            "comments_count": 2,  
     231            "slug": "testentry-137",  
     232            "is_published": 1 
     233        } 
     234    },  
     235    { 
     236        "pk": 134,  
     237        "model": "blog.entry",  
     238        "fields": { 
     239            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc134\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc134\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc134",  
     240            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc134",  
     241            "created_at": "2008-03-02 19:11:17",  
     242            "tags": [ 
     243                2,  
     244                4,  
     245                6,  
     246                1 
     247            ],  
     248            "is_active": 1,  
     249            "updated_at": "2008-03-02 19:11:17",  
     250            "published_at": "2008-03-02 19:11:17",  
     251            "trackbacks_count": 0,  
     252            "comments_count": 10,  
     253            "slug": "testentry-134",  
     254            "is_published": 1 
     255        } 
     256    },  
     257    { 
     258        "pk": 133,  
     259        "model": "blog.entry",  
     260        "fields": { 
     261            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc133\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc133\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc133",  
     262            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc133",  
     263            "created_at": "2008-03-02 19:11:16",  
     264            "tags": [ 
     265                2,  
     266                5,  
     267                1 
     268            ],  
     269            "is_active": 1,  
     270            "updated_at": "2008-03-02 19:11:16",  
     271            "published_at": "2008-03-02 19:11:16",  
     272            "trackbacks_count": 0,  
     273            "comments_count": 6,  
     274            "slug": "testentry-133",  
     275            "is_published": 1 
     276        } 
     277    },  
     278    { 
     279        "pk": 130,  
     280        "model": "blog.entry",  
     281        "fields": { 
     282            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc130\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc130\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc130",  
     283            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc130",  
     284            "created_at": "2008-03-02 19:11:13",  
     285            "tags": [ 
     286                2,  
     287                5,  
     288                4,  
     289                1 
     290            ],  
     291            "is_active": 1,  
     292            "updated_at": "2008-03-02 19:11:13",  
     293            "published_at": "2008-03-02 19:11:13",  
     294            "trackbacks_count": 0,  
     295            "comments_count": 10,  
     296            "slug": "testentry-130",  
     297            "is_published": 1 
     298        } 
     299    },  
     300    { 
     301        "pk": 125,  
     302        "model": "blog.entry",  
     303        "fields": { 
     304            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc125\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc125\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc125",  
     305            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc125",  
     306            "created_at": "2008-03-02 19:11:08",  
     307            "tags": [ 
     308                4,  
     309                6,  
     310                1,  
     311                3 
     312            ],  
     313            "is_active": 1,  
     314            "updated_at": "2008-03-02 19:11:08",  
     315            "published_at": "2008-03-02 19:11:08",  
     316            "trackbacks_count": 0,  
     317            "comments_count": 0,  
     318            "slug": "testentry-125",  
     319            "is_published": 1 
     320        } 
     321    },  
     322    { 
     323        "pk": 118,  
     324        "model": "blog.entry",  
     325        "fields": { 
     326            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc118\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc118\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc118",  
     327            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc118",  
     328            "created_at": "2008-03-02 19:11:01",  
     329            "tags": [ 
     330                2,  
     331                6,  
     332                1,  
     333                3 
     334            ],  
     335            "is_active": 1,  
     336            "updated_at": "2008-03-02 19:11:01",  
     337            "published_at": "2008-03-02 19:11:01",  
     338            "trackbacks_count": 0,  
     339            "comments_count": 8,  
     340            "slug": "testentry-118",  
     341            "is_published": 1 
     342        } 
     343    },  
     344    { 
     345        "pk": 116,  
     346        "model": "blog.entry",  
     347        "fields": { 
     348            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc116\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc116\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc116",  
     349            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc116",  
     350            "created_at": "2008-03-02 19:10:59",  
     351            "tags": [ 
     352                5,  
     353                4,  
     354                6,  
     355                1,  
     356                3 
     357            ],  
     358            "is_active": 1,  
     359            "updated_at": "2008-03-02 19:10:59",  
     360            "published_at": "2008-03-02 19:10:59",  
     361            "trackbacks_count": 0,  
     362            "comments_count": 0,  
     363            "slug": "testentry-116",  
     364            "is_published": 1 
     365        } 
     366    },  
     367    { 
     368        "pk": 115,  
     369        "model": "blog.entry",  
     370        "fields": { 
     371            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc115\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc115\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc115",  
     372            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc115",  
     373            "created_at": "2008-03-02 19:10:58",  
     374            "tags": [ 
     375                2,  
     376                5,  
     377                6,  
     378                3 
     379            ],  
     380            "is_active": 1,  
     381            "updated_at": "2008-03-02 19:10:58",  
     382            "published_at": "2008-03-02 19:10:58",  
     383            "trackbacks_count": 0,  
     384            "comments_count": 8,  
     385            "slug": "testentry-115",  
     386            "is_published": 1 
     387        } 
     388    },  
     389    { 
     390        "pk": 112,  
     391        "model": "blog.entry",  
     392        "fields": { 
     393            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc112\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc112\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc112",  
     394            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc112",  
     395            "created_at": "2008-03-02 19:10:55",  
     396            "tags": [ 
     397                2,  
     398                4,  
     399                6 
     400            ],  
     401            "is_active": 1,  
     402            "updated_at": "2008-03-02 19:10:55",  
     403            "published_at": "2008-03-02 19:10:55",  
     404            "trackbacks_count": 0,  
     405            "comments_count": 8,  
     406            "slug": "testentry-112",  
     407            "is_published": 1 
     408        } 
     409    },  
     410    { 
     411        "pk": 111,  
     412        "model": "blog.entry",  
     413        "fields": { 
     414            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc111\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc111\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc111",  
     415            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc111",  
     416            "created_at": "2008-03-02 19:10:54",  
     417            "tags": [ 
     418                2,  
     419                5,  
     420                4,  
     421                6 
     422            ],  
     423            "is_active": 1,  
     424            "updated_at": "2008-03-02 19:10:54",  
     425            "published_at": "2008-03-02 19:10:54",  
     426            "trackbacks_count": 0,  
     427            "comments_count": 0,  
     428            "slug": "testentry-111",  
     429            "is_published": 1 
     430        } 
     431    },  
     432    { 
     433        "pk": 108,  
     434        "model": "blog.entry",  
     435        "fields": { 
     436            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc108\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc108\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc108",  
     437            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc108",  
     438            "created_at": "2008-03-02 19:10:51",  
     439            "tags": [ 
     440                2,  
     441                5,  
     442                4,  
     443                6,  
     444                3 
     445            ],  
     446            "is_active": 1,  
     447            "updated_at": "2008-03-02 19:10:51",  
     448            "published_at": "2008-03-02 19:10:51",  
     449            "trackbacks_count": 0,  
     450            "comments_count": 4,  
     451            "slug": "testentry-108",  
     452            "is_published": 1 
     453        } 
     454    },  
     455    { 
     456        "pk": 104,  
     457        "model": "blog.entry",  
     458        "fields": { 
     459            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc104\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc104\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc104",  
     460            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc104",  
     461            "created_at": "2008-03-02 19:10:47",  
     462            "tags": [ 
     463                2,  
     464                4,  
     465                6,  
     466                3 
     467            ],  
     468            "is_active": 1,  
     469            "updated_at": "2008-03-02 19:10:47",  
     470            "published_at": "2008-03-02 19:10:47",  
     471            "trackbacks_count": 0,  
     472            "comments_count": 8,  
     473            "slug": "testentry-104",  
     474            "is_published": 1 
     475        } 
     476    },  
     477    { 
     478        "pk": 101,  
     479        "model": "blog.entry",  
     480        "fields": { 
     481            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc101\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc101\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc101",  
     482            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc101",  
     483            "created_at": "2008-03-02 19:10:44",  
     484            "tags": [ 
     485                2,  
     486                6,  
     487                3 
     488            ],  
     489            "is_active": 1,  
     490            "updated_at": "2008-03-02 19:10:44",  
     491            "published_at": "2008-03-02 19:10:44",  
     492            "trackbacks_count": 0,  
     493            "comments_count": 6,  
     494            "slug": "testentry-101",  
     495            "is_published": 1 
     496        } 
     497    },  
     498    { 
     499        "pk": 100,  
     500        "model": "blog.entry",  
     501        "fields": { 
     502            "description": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc100\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc100\n\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc100",  
     503            "title": "\u30c6\u30b9\u30c8\u30a8\u30f3\u30c8\u30ea\u30fc100",  
     504            "created_at": "2008-03-02 19:10:43",  
     505            "tags": [ 
     506                2,  
     507                4,  
     508                6 
     509            ],  </