diff --git a/admin.py b/admin.py
index f5905ee..6b0b4b4 100644
--- a/admin.py
+++ b/admin.py
@@ -12,3 +12,4 @@ admin.site.register(Town)
admin.site.register(PublicFarm)
admin.site.register(Resource)
admin.site.register(Market)
+admin.site.register(PointOfInterest)
diff --git a/models.py b/models.py
index 8d07dec..ddb07e2 100644
--- a/models.py
+++ b/models.py
@@ -83,10 +83,13 @@ class Player(models.Model):
class Location(models.Model):
- info_page = None
-
"""Model of a Location"""
+ info_page = None
+ """
+ Name of the info page view
+ """
+
DIMENSIONS = (
('O', 'Overworld'),
('N', 'Nether'),
@@ -238,6 +241,10 @@ class Location(models.Model):
return "%s: %s" % (self.loc_child_obj.__class__.__name__, self.name)
+class PointOfInterest(Location):
+ info_page = "GeoffreyPointOfInterest"
+
+
class Shop(Location):
info_page = "GeoffreyShopInfo"
diff --git a/templates/GeoffreyApp/pointofinterest_list.html b/templates/GeoffreyApp/pointofinterest_list.html
new file mode 100644
index 0000000..0e23887
--- /dev/null
+++ b/templates/GeoffreyApp/pointofinterest_list.html
@@ -0,0 +1,9 @@
+{% extends "GeoffreyApp/base.html" %}
+
+{% block header %}
+ Bases
+{% endblock %}
+
+{% block content %}
+ {% include "GeoffreyApp/location_table.html" with loc_list=pointofinterest_list show_owner=True %}
+{% endblock %}
diff --git a/templatetags/navbar.py b/templatetags/navbar.py
index e597b36..f1787f5 100644
--- a/templatetags/navbar.py
+++ b/templatetags/navbar.py
@@ -1,18 +1,20 @@
from django import template
from django.urls import reverse
+from GeoffreyApp.models import Player, Shop, Base, Town, ItemListing, PublicFarm, Market, PointOfInterest
register = template.Library()
-navbar_options = [
- ("Home", reverse("GeoffreyHome")),
- ("Players", reverse("GeoffreyPlayers")),
- ("Shops", reverse("GeoffreyShops")),
- ("Bases", reverse("GeoffreyBases")),
- ("Towns", reverse("GeoffreyTowns")),
- ("Item Listings", reverse("GeoffreyItems")),
- ("Public Farms", reverse("GeoffreyPublicFarms")),
- ("Markets", reverse("GeoffreyMarkets"))
-]
+navbar_options = {
+ "Home": ["Home", reverse("GeoffreyHome")],
+ "Player": ["Players", reverse("GeoffreyPlayers")],
+ "Shop": ["Shops", reverse("GeoffreyShops")],
+ "Base": ["Bases", reverse("GeoffreyBases")],
+ "Town": ["Towns", reverse("GeoffreyTowns")],
+ "ItemListing": ["Item Listings", reverse("GeoffreyItems")],
+ "PublicFarm": ["Public Farms", reverse("GeoffreyPublicFarms")],
+ "Market": ["Markets", reverse("GeoffreyMarkets")],
+ "PointOfInterest": ["Points of Interest", reverse("GeoffreyPointOfInterest")]
+}
option_format = '
{} '
@@ -21,12 +23,12 @@ option_format = ' {} <
def get_navbar(page):
navbar = ""
- for option in navbar_options:
- if page == option[0]:
+ for option in navbar_options.keys():
+ if page == option:
active = ' active'
else:
active = ''
- navbar += option_format.format(active, option[1], option[0])
+ navbar += option_format.format(active, navbar_options[option][1], navbar_options[option][0])
return navbar
diff --git a/urls.py b/urls.py
index 6cc5f99..dac4671 100644
--- a/urls.py
+++ b/urls.py
@@ -16,6 +16,9 @@ urlpatterns = [
url(r'^farms/$', views.PublicFarmList.as_view(), name='GeoffreyPublicFarms'),
url(r'^farms/(?P[0-9]{1,9})/$', views.PublicFarmInfo.as_view(), name='GeoffreyPublicFarmInfo'),
url(r'^markets/$', views.MarketList.as_view(), name='GeoffreyMarkets'),
- url(r'^markets/(?P[0-9]{1,9})/$', views.MarketInfo.as_view(), name='GeoffreyMarketInfo')
+ url(r'^markets/(?P[0-9]{1,9})/$', views.MarketInfo.as_view(), name='GeoffreyMarketInfo'),
+ url(r'^pointofinterest/$', views.PointOfInterestList.as_view(), name='GeoffreyPointOfInterest'),
+ url(r'^pointofinterest/(?P[0-9]{1,9})/$', views.PointOfInterestInfo.as_view(),
+ name='GeoffreyPointOfInterestInfo'),
]
diff --git a/views.py b/views.py
index a1829cc..203ebbe 100644
--- a/views.py
+++ b/views.py
@@ -36,23 +36,23 @@ class SearchList(View):
return render(request, 'GeoffreyApp/search.html', context=context)
-class PlayerList(generic.ListView):
+class GeoffreyModelList(generic.ListView):
+ model = None
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+
+ context['current_page'] = self.model.__name__
+ return context
+
+
+class PlayerList(GeoffreyModelList):
model = Player
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- context['current_page'] = "Players"
- return context
-
-class ShopList(generic.ListView):
+class ShopList(GeoffreyModelList):
model = Shop
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- context['current_page'] = "Shops"
- return context
-
def get_queryset(self):
qs = Shop.objects.all()
@@ -63,137 +63,142 @@ class ShopList(generic.ListView):
return qs
-class BaseList(generic.ListView):
+class BaseList(GeoffreyModelList):
model = Base
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- context['current_page'] = "Bases"
- return context
-
-class TownList(generic.ListView):
+class TownList(GeoffreyModelList):
model = Town
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- context['current_page'] = "Towns"
- return context
-
-class PublicFarmList(generic.ListView):
+class PublicFarmList(GeoffreyModelList):
model = PublicFarm
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- context['current_page'] = "Public Farms"
- return context
-
-class ItemListingList(generic.ListView):
+class ItemListingList(GeoffreyModelList):
model = ItemListing
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- context['current_page'] = "Item Listings"
- return context
-
-class MarketList(generic.ListView):
+class MarketList(GeoffreyModelList):
model = Market
- def get_context_data(self, **kwargs):
- context = super().get_context_data(**kwargs)
- context['current_page'] = "Market"
+
+class PointOfInterestList(GeoffreyModelList):
+ model = PointOfInterest
+
+
+class ModelInfoView(View):
+ template = None
+
+ def get_context(self, id):
+ return None
+
+ def get(self, request, id):
+ try:
+ return render(request, 'GeoffreyApp/%s' % self.template, context=self.context(id))
+ except Player.DoesNotExist:
+ return render(request, 'GeoffreyApp/error.html')
+
+
+class PlayerInfo(ModelInfoView):
+ template = 'player.html'
+
+ def get_context(self, id):
+ player = Player.objects.get(pk=id)
+ loc_list = Location.objects.filter(owner=player).all()
+
+ context = {
+ "player": player,
+ "loc_list": loc_list
+ }
+
return context
-class PlayerInfo(View):
- def get(self, request, id):
- try:
- player = Player.objects.get(pk=id)
- loc_list = Location.objects.filter(owner=player).all()
+class ShopInfo(ModelInfoView):
+ template = 'shop.html'
- context = {
- "player": player,
- "loc_list": loc_list
- }
- return render(request, 'GeoffreyApp/player.html', context=context)
- except Player.DoesNotExist:
- return render(request, 'GeoffreyApp/error.html')
+ def get_context(self, id):
+ shop = Shop.objects.get(pk=id)
+ inventory = ItemListing.objects.filter(shop=shop).all()
+
+ context = {
+ "loc": shop,
+ "inventory": inventory
+ }
+
+ return context
-class ShopInfo(View):
- def get(self, request, id):
- try:
- shop = Shop.objects.get(pk=id)
- inventory = ItemListing.objects.filter(shop=shop).all()
+class BaseInfo(ModelInfoView):
+ template = "location.html"
- context = {
- "loc": shop,
- "inventory": inventory
- }
- return render(request, 'GeoffreyApp/shop.html', context=context)
- except Player.DoesNotExist:
- return render(request, 'GeoffreyApp/error.html')
+ def get_context(self, id):
+ base = Base.objects.get(pk=id)
+
+ context = {
+ "loc": base,
+ }
+
+ return context
-class BaseInfo(View):
- def get(self, request, id):
- try:
- base = Base.objects.get(pk=id)
+class TownInfo(ModelInfoView):
+ template = "town.html"
- context = {
- "loc": base,
- }
- return render(request, 'GeoffreyApp/location.html', context=context)
- except Player.DoesNotExist:
- return render(request, 'GeoffreyApp/error.html')
+ def get_context(self, id):
+ town = Town.objects.get(pk=id)
+
+ residents = town.residents.all()
+
+ context = {
+ "loc": town,
+ "residents": residents
+ }
+
+ return context
-class TownInfo(View):
- def get(self, request, id):
- try:
- town = Town.objects.get(pk=id)
+class PublicFarmInfo(ModelInfoView):
+ template = "publicfarm.html"
- residents = town.residents.all()
+ def get_context(self, id):
+ public_farm = PublicFarm.objects.get(pk=id)
- context = {
- "loc": town,
- "residents": residents
- }
- return render(request, 'GeoffreyApp/town.html', context=context)
- except Player.DoesNotExist:
- return render(request, 'GeoffreyApp/error.html')
+ resources = public_farm.resource.all()
+
+ context = {
+ "loc": public_farm,
+ "resources": resources
+ }
+
+ return context
-class PublicFarmInfo(View):
- def get(self, request, id):
- try:
- public_farm = PublicFarm.objects.get(pk=id)
+class MarketInfo(ModelInfoView):
+ template = "market.html"
- resources = public_farm.resource.all()
+ def get_context(self, id):
+ market = Market.objects.get(pk=id)
- context = {
- "loc": public_farm,
- "resources": resources
- }
- return render(request, 'GeoffreyApp/publicfarm.html', context=context)
- except Player.DoesNotExist:
- return render(request, 'GeoffreyApp/error.html')
+ shops = market.get_shops(limit=100)
+
+ context = {
+ "loc": market,
+ "shops": shops
+ }
+
+ return context
-class MarketInfo(View):
- def get(self, request, id):
- try:
- market = Market.objects.get(pk=id)
+class PointOfInterestInfo(ModelInfoView):
+ template = "location.html"
- shops = market.get_shops(limit=100)
+ def get_context(self, id):
+ point_of_interest = PointOfInterest.objects.get(pk=id)
- context = {
- "loc": market,
- "shops": shops
- }
- return render(request, 'GeoffreyApp/market.html', context=context)
- except Player.DoesNotExist:
- return render(request, 'GeoffreyApp/error.html')
+ context = {
+ "loc": point_of_interest,
+ }
+
+ return context