Refactored all listing URLs. Auto reverse for i18n

This commit is contained in:
Felipe Martín 2015-09-08 23:28:33 +02:00
parent 0d89481d02
commit d649f11c32
13 changed files with 117 additions and 139 deletions

View File

@ -49,7 +49,7 @@ class Collection(models.Model):
@models.permalink
def get_absolute_url(self):
return ('amiibo:collection', [self.slug])
return ('amiibo:figures-list', [self.slug])
@property
def amiibos(self):
@ -131,6 +131,14 @@ class Amiibo(models.Model):
return result
@property
def is_card(self):
return self.type == self.CARD
@property
def is_figure(self):
return self.type == self.FIGURE
def __unicode__(self):
return unicode(self.name_eu) or u''
@ -153,6 +161,10 @@ class AmiiboFigure(Amiibo):
self.collection.slug, self.slug
)
@property
def image(self):
return self.statue
@property
def image_statue(self):
return 'images/amiibo/{}/{}.png'.format(

View File

@ -13,9 +13,13 @@ from .views import (
urlpatterns = patterns(
'',
url(_(r'^(?P<collection>[\w\d\-]+)$'),
CollectionView.as_view(),
name='collection'),
url(_('^cards$'),
CollectionCardView.as_view(),
name='cards-list'),
url(_(r'^figures$'),
CollectionFigureView.as_view(),
name='figures-list'),
url(_(r'^cards/(?P<collection>[\w\d\-]+)$'),
CollectionCardView.as_view(),
name='cards-list'),

View File

@ -14,10 +14,6 @@ from .models import (
)
from . import services
class HomeModel:
def get_absolute_url(self):
return reverse('amiibo:collection', args=[_('all')])
class CollectionView(View):
template = 'amiibo/collection.html'
@ -40,7 +36,7 @@ class CollectionView(View):
return render(request, self.template, {
'selected_collection': collection,
'amiibo_list': amiibo_list,
'item': collection or HomeModel(),
'item': collection,
})
@ -50,6 +46,7 @@ class CollectionFigureView(CollectionView):
class CollectionCardView(CollectionView):
template = 'amiibo/collection-cards.html'
type = Amiibo.CARD
model = AmiiboCard

View File

@ -3,6 +3,7 @@
from __future__ import unicode_literals
from django.utils.translation import activate, deactivate, get_language
from django.core.urlresolvers import resolve, reverse
from django.conf import settings
@ -22,13 +23,13 @@ def files(request):
def i18n(request):
lang = get_language()
result = []
res = resolve(request.path)
for lang_code, name in settings.LANGUAGES:
activate(lang_code)
this = {
'code': lang_code,
'name': name,
'url': request.path.replace('/' + request.LANGUAGE_CODE,
'/' + lang_code)
# 'url': reverse(res.url_name, args=res.args, kwargs=res.kwargs)
}
result.append(this)
deactivate()

View File

@ -1,12 +1,11 @@
# coding: utf-8
# -*- coding: utf-8 -*-
# django
from django.views.generic.base import View
from django.shortcuts import redirect
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _
from django.shortcuts import render
class HomeView(View):
template = 'home/home.html'
def get(self, request):
return redirect(reverse('amiibo:collection', args=[_('all')]))
return render(request, self.template, {})

View File

@ -61,6 +61,7 @@ INSTALLED_APPS = (
'amiibofindr.apps.notifications',
)
APPEND_SLASH = False
MIDDLEWARE_CLASSES = (
'reversion.middleware.RevisionMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',

View File

@ -36,7 +36,7 @@
{% trans "Figures" %}
<i class="dropdown icon"></i>
<div class="menu">
<a class="item" href="{% url 'amiibo:collection' all_word %}">{% trans "All" %}</a>
<a class="item" href="{% url 'amiibo:figures-list' %}">{% trans "All" %}</a>
<div class="ui divider"></div>
{% for col in COLLECTIONS_FIGURES %}
<a class="item" href="{{ col.get_absolute_url }}">{{ col.name }}</a>
@ -48,7 +48,7 @@
{% trans "Cards" %}
<i class="dropdown icon"></i>
<div class="menu">
<a class="item" href="{% url 'amiibo:cards-list' all_word %}">{% trans "All" %}</a>
<a class="item" href="{% url 'amiibo:cards-list' %}">{% trans "All" %}</a>
{% for col in COLLECTIONS_CARDS %}
<a class="item" href="{% url 'amiibo:cards-list' col.slug %}">{{ col.name }}</a>
{% endfor %}
@ -108,9 +108,7 @@
</div>
</div>
<div class="ui breadcrumb">
{% block breadcrumb %}
<a class="section" href="{% url 'amiibo:collection' 'all' %}">Home</a>
{% endblock %}
{% block breadcrumb %}{% endblock %}
</div>
</div>

View File

@ -1,104 +1,6 @@
{% extends "_layout.html" %}
{% load i18n staticfiles thumbnail %}
{% extends "amiibo/amiibo-figure.html" %}
{% load thumbnail %}
{% block page_title %}{% blocktrans with collection=selected_collection.name amiibo=amiibo.name %}{{ amiibo }} amiibo from {{ collection }} in {% endblocktrans %}{{ block.super }}{% endblock %}
{% block meta_twitter_title %}{% blocktrans with collection=selected_collection.name amiibo=amiibo.name %}{{ amiibo }} amiibo from {{ collection }} in {% endblocktrans %}{{ block.super }}{% endblock %}
{% block meta_og_title %}{% blocktrans with collection=selected_collection.name amiibo=amiibo.name %}{{ amiibo }} amiibo from {{ collection }} in {% endblocktrans %}{{ block.super }}{% endblock %}
{% block meta_twitter_image %}{% thumbnail amiibo.statue 300x300 %}{% endblock %}
{% block meta_og_image %}{% thumbnail amiibo.statue 300x300 %}{% endblock %}
{% block meta_twitter_url %}{{ amiibo.get_absolute_url }}{% endblock %}
{% block meta_og_url %}{{ amiibo.get_absolute_url }}{% endblock %}
{% block js_views %}money,time{% endblock %}
{% block breadcrumb %}
{{ block.super }}
<i class="right chevron icon divider"></i>
<a class="section" href="{{ selected_collection.get_absolute_url }}">{{ selected_collection.name }}</a>
<i class="right chevron icon divider"></i>
<span class="active section">{{ amiibo.name }}</span>
{% endblock %}
{% block main_content %}
<div class="ui page grid">
<div class="five wide column">
<div class="ui card">
<a class="image">
<img src="{% thumbnail amiibo.statue 340x340 crop=smart %}" />
</a>
<div class="content">
<!-- <i class="right floated like icon"></i> -->
<!-- <i class="right floated star icon"></i> -->
<div class="header">{{ amiibo.name }}</div>
<div class="meta">
<a href="{{ amiibo.collection.get_absolute_url }}">{{ amiibo.collection.name }}</a>
</div>
<!-- <div class="description">
<p>asd</p>
</div> -->
</div>
<!-- <div class="extra content">
<span class="left floated like">
<i class="like icon"></i>
Like
</span>
<span class="right floated star">
<i class="star icon"></i>
Favorite
</span>
</div> -->
</div>
</div>
<div class="eleven wide column">
{% if amiibo.shops_set.exists %}
<table class="ui celled table">
<thead>
<tr>
<th>{% trans "Shop" %}</th>
<th class="center aligned">{% trans "Price" %}</th>
</tr>
</thead>
<tbody>
{% for relation in amiibo.shops_set.all %}
<tr>
{% with price=relation.last_price.price stock=relation.last_price.stock currency=relation.last_price.currency %}
{% spaceless %}
<td>
<a href="{{ relation.get_url }}" target="_blank">
<i class="{% if relation.shop.flag_code == 'uk' %}gb{% else %}{{ relation.shop.flag_code }}{% endif %} flag"></i> {{ relation.shop.name }}
</a>
{% if relation.last_price.date %}
<i class="ui icon info circle float-right" data-component="silbingPopup"></i>
<div class="ui special popup">
<em>{% trans "Updated " %} <span data-relative="{{ relation.last_price.date.isoformat }}"></span></em>
</div>
{% endif %}
{% if relation.is_pack %}
<i class="icon cube float-right" data-component="silbingPopup"></i>
<div class="ui special popup">
{% trans "This is a pack of various items" %}
</div>
{% endif %}
</td>
{% endspaceless %}
<td class="center aligned {{ stock|yesno:'positive,negative' }}">
{% if stock and price %}
<span data-price="{{ price }}" data-currency="{{ currency }}" data-money>
{{ price }} {{ relation.last_price.currency }}
</span>
{% else %}
{% trans "No stock" %}
{% endif %}
</td>
{% endwith %}
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</div>
</div>
{% block amiibo_image %}
<img src="{% thumbnail amiibo.image 300x440 crop %}" class="ui image centered" />
{% endblock %}

View File

@ -62,7 +62,9 @@ AMIIBO FIGURE
<div class="ui page stackable grid">
<div class="four wide column">
<div class="ui segment">
<img src="{% thumbnail amiibo.statue 340x340 crop=smart %}" class="ui image centered" />
{% block amiibo_image %}
<img src="{% thumbnail amiibo.statue 340x340 crop %}" class="ui image centered" />
{% endblock %}
</div>
</div>
<div class="twelve wide column">

View File

@ -0,0 +1,21 @@
{% extends "amiibo/collection.html" %}
{% load i18n staticfiles %}
{% block main_content %}
<div class="ui page grid">
<div class="sixteen wide column">
{% if selected_collection.name %}<h1>{{ selected_collection.name }}</h1>{% endif %}
<div class="ui icon big fluid input">
<input type="text" placeholder="{% trans 'Search...' %}" data-component="collectionSearchInput">
<i class="inverted circular cancel link icon" data-component="collectionSearchReset"></i>
</div>
</div>
<div class="sixteen wide column">
<div class="ui six doubling cards" data-component="collectionList">
{% for amiibo in amiibo_list %}
{% include "amiibo/widgets/amiibo-card.html" with amiibo=amiibo only %}
{% endfor %}
</div>
</div>
</div>
{% endblock %}

View File

@ -2,7 +2,11 @@
<div class="ui link card" data-amiibo-names="{{ amiibo.get_all_names|lower }}" data-href="{{ amiibo.get_absolute_url }}">
<div class="image">
<div class="ui fluid image">
<img src="{% thumbnail amiibo.statue "340x340" crop %}" alt="{{ amiibo.name }}">
{% if amiibo.is_card %}
<img src="{% thumbnail amiibo.image "240x340" crop %}" alt="{{ amiibo.name }}">
{% else %}
<img src="{% thumbnail amiibo.image "340x340" crop %}" alt="{{ amiibo.name }}">
{% endif %}
</div>
</div>
<div class="content text-center">

View File

@ -1,16 +1,53 @@
{% extends "_layout.html" %}
{% load staticfiles %}
{% load staticfiles i18n %}
{% block main_content %}
<div class="uk-grid">
{% for amiibo in amiibo_list %}
<div class="uk-width-medium-1-5">
<a class="uk-panel uk-panel-box uk-panel-box-hover">
<h3 class="uk-panel-title uk-text-center">{{ amiibo.name_eu }}</h3>
<img src="{% static amiibo.image_statue %}" />
</a>
<div class="ui page grid">
<div class="sixteen wide column">
<h1 class="ui center aligned icon header">
<i class="circular users icon"></i>
{% trans 'Welcome to amiibofindr!' %}
</h1>
</div>
{% if forloop.counter|divisibleby:5 %}</div><div class="uk-grid">{% endif %}
{% endfor %}
</div>
<div class="four wide column">
<img src="http://placehold.it/300x300" class="ui image">
</div>
<div class="nine wide column">
<h2>{% lorem 6 w random %}</h2>
{% lorem 1 p %}
</div>
<div class="three wide column"></div>
<div class="three wide column"></div>
<div class="nine wide column">
<h2>{% lorem 6 w random %}</h2>
{% lorem 1 p %}
</div>
<div class="four wide column">
<img src="http://placehold.it/300x300" class="ui image">
</div>
<div class="four wide column">
<img src="http://placehold.it/300x300" class="ui image">
</div>
<div class="nine wide column">
<h2>{% lorem 6 w random %}</h2>
{% lorem 1 p %}
</div>
<div class="three wide column"></div>
<div class="three wide column"></div>
<div class="nine wide column">
<h2>{% lorem 6 w random %}</h2>
{% lorem 1 p %}
</div>
<div class="four wide column">
<img src="http://placehold.it/300x300" class="ui image">
</div>
</div>
{% endblock %}

View File

@ -34,8 +34,8 @@ urlpatterns = patterns(
urlpatterns += i18n_patterns(
url(_(r'^account/'), include('allauth.urls')),
url(r'^', include('amiibofindr.apps.amiibo.urls', namespace='amiibo')),
url(r'^', include('amiibofindr.apps.home.urls', namespace='home')),
url(r'', include('amiibofindr.apps.amiibo.urls', namespace='amiibo')),
url(r'', include('amiibofindr.apps.home.urls', namespace='home')),
)
if settings.DEBUG: