Refactored all listing URLs. Auto reverse for i18n
This commit is contained in:
parent
0d89481d02
commit
d649f11c32
|
@ -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(
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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, {})
|
||||
|
|
|
@ -61,6 +61,7 @@ INSTALLED_APPS = (
|
|||
'amiibofindr.apps.notifications',
|
||||
)
|
||||
|
||||
APPEND_SLASH = False
|
||||
MIDDLEWARE_CLASSES = (
|
||||
'reversion.middleware.RevisionMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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 %}
|
|
@ -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">
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue