fmartingr
/
shelfzilla
Archived
1
0
Fork 0

+ Added base series.list and series.detail pages (views / urls)

+ Added Publisher.url field
+ Base ordering for models
This commit is contained in:
Felipe Martin 2014-03-28 15:48:05 +01:00
parent b92a79c132
commit dc3268aec8
16 changed files with 206 additions and 3 deletions

View File

@ -82,7 +82,7 @@ module.exports = (grunt) ->
options:
livereload: true
layout:
files: ['shelfzilla/themes/bootflat/templates/**/*.html', 'shelfzilla/themes/bootflat/templates/**/*.jinja']
files: ['shelfzilla/themes/**/*.html', 'shelfzilla/themes/**/*.jinja']
tasks: []
less:
files: ['shelfzilla/themes/bootflat/static/less/*.less']

View File

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'Publisher.url'
db.add_column(u'manga_publisher', 'url',
self.gf('django.db.models.fields.URLField')(max_length=200, null=True, blank=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'Publisher.url'
db.delete_column(u'manga_publisher', 'url')
models = {
u'manga.publisher': {
'Meta': {'ordering': "['name']", 'object_name': 'Publisher'},
'for_review': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'for_review_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
},
u'manga.series': {
'Meta': {'ordering': "['name']", 'object_name': 'Series'},
'for_review': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'for_review_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '40'})
},
u'manga.volume': {
'Meta': {'ordering': "['series__name', 'number']", 'object_name': 'Volume'},
'for_review': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'for_review_comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'isbn_10': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
'isbn_13': ('django.db.models.fields.CharField', [], {'max_length': '13', 'null': 'True', 'blank': 'True'}),
'number': ('django.db.models.fields.IntegerField', [], {}),
'publisher': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'volumes'", 'to': u"orm['manga.Publisher']"}),
'series': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'volumes'", 'to': u"orm['manga.Series']"})
}
}
complete_apps = ['manga']

View File

@ -6,6 +6,7 @@ from shelfzilla.models import ReviewModel
class Publisher(ReviewModel):
name = models.CharField(_('Name'), max_length=40)
url = models.URLField(_('URL'), blank=True, null=True)
def __unicode__(self):
return u'{}'.format(self.name)
@ -15,6 +16,7 @@ class Publisher(ReviewModel):
return self.volumes.distinct('series')
class Meta:
ordering = ['name']
verbose_name = _('Publisher')
verbose_name_plural = _('Publishers')
@ -30,6 +32,7 @@ class Series(ReviewModel):
return self.volumes.distinct('publisher')
class Meta:
ordering = ['name']
verbose_name = _('Series')
verbose_name_plural = _('Series')
@ -47,5 +50,6 @@ class Volume(ReviewModel):
return u'{} #{}'.format(self.series.name, self.number)
class Meta:
ordering = ['series__name', 'number']
verbose_name = _('Volume')
verbose_name_plural = _('Volumes')

View File

View File

@ -0,0 +1,9 @@
from django.conf.urls import patterns, url
from ..views.series import SeriesListView, SeriesDetailView
urlpatterns = patterns(
'',
url(r'^$', SeriesListView.as_view(), name='series.list'),
url(r'^(?P<sid>\d+)/$', SeriesDetailView.as_view(), name='series.detail'),
)

View File

View File

@ -0,0 +1,35 @@
from django.template import RequestContext
from django.shortcuts import render_to_response, get_object_or_404
from shelfzilla.views import View
from ..models import Series
class SeriesView(View):
section = 'series'
class SeriesListView(SeriesView):
template = 'manga/series/list.html'
def get(self, request):
items = Series.objects.all()
context = {
'items': items
}
ctx = RequestContext(request, self.get_context(context))
return render_to_response(self.template, context_instance=ctx)
class SeriesDetailView(SeriesView):
template = 'manga/series/detail.html'
def get(self, request, sid):
item = get_object_or_404(Series, pk=sid)
context = {
'item': item
}
ctx = RequestContext(request, self.get_context(context))
return render_to_response(self.template, context_instance=ctx)

View File

@ -7,5 +7,9 @@ class ReviewModel(models.Model):
for_review_comment = models.TextField(
_('Review comment'), null=True, blank=True)
def first_letter(self):
if hasattr(self, 'name'):
return self.name and self.name[0] or ''
class Meta:
abstract = True

View File

@ -13,3 +13,8 @@ DATABASES = {
STATICFILES_DIRS += (
os.path.join(BASE_DIR, "..", "static_components"),
)
# Apps
INSTALLED_APPS += (
'django.contrib.webdesign',
)

View File

@ -1,6 +1,7 @@
// jquery vegas, background with opacity
// jquery vegas, background with opacity, not overlaying
.vegas-background {
opacity: .3;
z-index: -200;
}
// bootstrap navbar, margin-top

View File

@ -1,3 +1,7 @@
body {
background-color: rgb(241, 242, 246);
}
/* Login panel */
.panel-login {
@height: 180px;
@ -12,3 +16,9 @@
top: 50%;
width: 300px;
}
/* Alternative behaviours for bootstrap */
.panel-title-alt {
font-size: 1.75em !important;
font-weight: bold;
}

View File

@ -24,7 +24,7 @@
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li {% if navigation.section == "series" %}class="active"{% endif %}>
<a href="#">{% trans "Series" %}</a>
<a href="{% url "series.list" %}">{% trans "Series" %}</a>
</li>
<li {% if navigation.section == "publishers" %}class="active"{% endif %}>
<a href="#">{% trans "Publishers" %}</a>

View File

@ -0,0 +1,41 @@
{% extends "_layout.html" %}
{% load webdesign %}
{% block main_content %}
<div class="container">
<div class="row">
<div class="col-md-4">
<div class="panel panel-primary">
<div class="panel-heading">
<h1 class="panel-title panel-title-alt text-center">{{ item.name }}</h1>
</div>
<div class="panel-body text-center">
<img src="http://placekitten.com/g/200/300/" />
</div>
<ul class="list-group">
<li class="list-group-item">Detail 1</li>
<li class="list-group-item">Detail 2</li>
<li class="list-group-item">Detail 3</li>
</ul>
</div>
</div>
<div class="col-md-8">
<div class="well">
{% lorem 2 p %}
</div>
<div class="row">
<div class="col-md-3"><div class="well text-center">Volume</div></div>
<div class="col-md-3"><div class="well text-center">Volume</div></div>
<div class="col-md-3"><div class="well text-center">Volume</div></div>
<div class="col-md-3"><div class="well text-center">Volume</div></div>
</div>
<div class="row">
<div class="col-md-4"><div class="well text-center">Volume</div></div>
<div class="col-md-4"><div class="well text-center">Volume</div></div>
<div class="col-md-4"><div class="well text-center">Volume</div></div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,29 @@
{% extends "_layout.html" %}
{% block main_content %}
{% regroup items by first_letter as letter_list %}
<div class="container">
<div class="pull-right">
<ul class="pagination">
{% for letter in letter_list %}
<li>
<a href="#{{ letter.grouper }}">{{ letter.grouper }}</a>
</li>
{% endfor %}
</ul>
</div>
<div class="clearfix"></div>
{% for letter in letter_list %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title" id="{{ letter.grouper }}">{{ letter.grouper }}</h3>
</div>
<ul class="list-group">
{% for item in letter.list %}
<li class="list-group-item"><a href="{% url "series.detail" item.pk %}">{{ item.name }}</a></li>
{% endfor %}
</ul>
</div>
{% endfor %}
</div>
{% endblock %}

View File

@ -7,6 +7,7 @@ urlpatterns = patterns(
'',
url(r'^', include('shelfzilla.apps.landing.urls')),
url(r'^', include('shelfzilla.apps.users.urls')),
url(r'^series/', include('shelfzilla.apps.manga.urls.series')),
url(r'^$', include('shelfzilla.apps.homepage.urls')),
url(r'^admin/', include(admin.site.urls)),
)

13
shelfzilla/views.py Normal file
View File

@ -0,0 +1,13 @@
from django.views.generic import View as DjangoView
class View(DjangoView):
section = None
def get_context(self, context):
if self.section:
context['navigation'] = {
'section': self.section
}
return context