diff --git a/tournamentpages/admin.py b/tournamentpages/admin.py index 0fcda56..67b400a 100644 --- a/tournamentpages/admin.py +++ b/tournamentpages/admin.py @@ -20,43 +20,43 @@ class BandAdmin(TabbedModelAdmin): tab_homepage = ( (None, { - 'fields': ('homepage', 'homepage_buttons') + 'fields': ('homepage_rename', 'homepage', 'homepage_buttons') }), ) tab_schedule_and_results = ( (None, { - 'fields': ('schedule_and_results', 'schedule_and_results_enabled', 'schedule_and_results_buttons') + 'fields': ('schedule_and_results_rename', 'schedule_and_results', 'schedule_and_results_enabled', 'schedule_and_results_buttons') }), ) tab_registration = ( (None, { - 'fields': ('registration', 'registration_enabled', 'registration_buttons') + 'fields': ('registration_rename', 'registration', 'registration_enabled', 'registration_buttons') }), ) tab_rules = ( (None, { - 'fields': ('rules', 'rules_enabled', 'rules_buttons') + 'fields': ('rules_rename', 'rules', 'rules_enabled', 'rules_buttons') }), ) tab_fee_and_prizes = ( (None, { - 'fields': ('fee_and_prizes', 'fee_and_prizes_enabled', 'fee_and_prizes_buttons') + 'fields': ('fee_and_prizes_rename', 'fee_and_prizes', 'fee_and_prizes_enabled', 'fee_and_prizes_buttons') }), ) tab_accomodation = ( (None, { - 'fields': ('accomodation', 'accomodation_enabled', 'accomodation_buttons') + 'fields': ('accomodation_rename', 'accomodation', 'accomodation_enabled', 'accomodation_buttons') }), ) tab_contact = ( (None, { - 'fields': ('contact', 'contact_enabled', 'contact_buttons') + 'fields': ('contact_rename', 'contact', 'contact_enabled', 'contact_buttons') }), ) @@ -70,3 +70,20 @@ class BandAdmin(TabbedModelAdmin): ('Noclegi', tab_accomodation), ('Kontakt', tab_contact), ] + + def get_tabs(self, request, obj=None): + tabs = self.tabs + if obj is not None: + + tabs = [ + ('Ogólne ustawienia', self.tab_general), + (obj.homepage_rename, self.tab_homepage), + (obj.schedule_and_results_rename, self.tab_schedule_and_results), + (obj.registration_rename, self.tab_registration), + (obj.rules_rename, self.tab_rules), + (obj.fee_and_prizes_rename, self.tab_fee_and_prizes), + (obj.accomodation_rename, self.tab_accomodation), + (obj.contact_rename, self.tab_contact), + ] + self.tabs = tabs + return super(BandAdmin, self).get_tabs(request, obj) diff --git a/tournamentpages/migrations/0004_tournamentpage_accomodation_rename_and_more.py b/tournamentpages/migrations/0004_tournamentpage_accomodation_rename_and_more.py new file mode 100644 index 0000000..de257ca --- /dev/null +++ b/tournamentpages/migrations/0004_tournamentpage_accomodation_rename_and_more.py @@ -0,0 +1,83 @@ +# Generated by Django 4.1.7 on 2023-05-13 17:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tournamentpages', '0003_tournamentpage_homepage_buttons'), + ] + + operations = [ + migrations.AddField( + model_name='tournamentpage', + name='accomodation_rename', + field=models.CharField(default='Noclegi', max_length=250, verbose_name='Nazwa przycisku'), + ), + migrations.AddField( + model_name='tournamentpage', + name='contact_rename', + field=models.CharField(default='Kontakt', max_length=250, verbose_name='Nazwa przycisku'), + ), + migrations.AddField( + model_name='tournamentpage', + name='fee_and_prizes_rename', + field=models.CharField(default='Wpisowe i nagrody', max_length=250, verbose_name='Nazwa przycisku'), + ), + migrations.AddField( + model_name='tournamentpage', + name='homepage_rename', + field=models.CharField(default='Strona główna', max_length=250, verbose_name='Nazwa przycisku'), + ), + migrations.AddField( + model_name='tournamentpage', + name='registration_rename', + field=models.CharField(default='Rejestracja', max_length=250, verbose_name='Nazwa przycisku'), + ), + migrations.AddField( + model_name='tournamentpage', + name='rules_rename', + field=models.CharField(default='Regulamin', max_length=250, verbose_name='Nazwa przycisku'), + ), + migrations.AddField( + model_name='tournamentpage', + name='schedule_and_results_rename', + field=models.CharField(default='Harmonogram i wyniki', max_length=250, verbose_name='Nazwa przycisku'), + ), + migrations.AlterField( + model_name='tournamentpage', + name='accomodation_buttons', + field=models.TextField(blank=True, default='', help_text='Tutaj można wpisać dowolną ilość przycisków w następującym formacie:

tekst1 -> link
teskt2 | link
...

Symbol -> oznacza, że link będzie otwarty w nowej karcie
Symbol | oznacza, że link będzie otwarty w tej samej karcie
Na przykład:

pzbs -> https://pzbs.pl
fotogaleria | https://galeria.podlaskizbs.pl
cezar -> https://www.msc.com.pl/cezar

PZBS i Cezar zostaną otwarte w nowej karcie
UWAGA !!
Gdy nie podamy tekstu przyciku, nie pokaże on się, można to wykorzystać w taki sposób:

-> link do wyników
fotogaleria -> link do fotogalerii

Wtedy pokaże się tylko przycisk fotogalerii
', verbose_name='Przyciski'), + ), + migrations.AlterField( + model_name='tournamentpage', + name='contact_buttons', + field=models.TextField(blank=True, default='', help_text='Tutaj można wpisać dowolną ilość przycisków w następującym formacie:

tekst1 -> link
teskt2 | link
...

Symbol -> oznacza, że link będzie otwarty w nowej karcie
Symbol | oznacza, że link będzie otwarty w tej samej karcie
Na przykład:

pzbs -> https://pzbs.pl
fotogaleria | https://galeria.podlaskizbs.pl
cezar -> https://www.msc.com.pl/cezar

PZBS i Cezar zostaną otwarte w nowej karcie
UWAGA !!
Gdy nie podamy tekstu przyciku, nie pokaże on się, można to wykorzystać w taki sposób:

-> link do wyników
fotogaleria -> link do fotogalerii

Wtedy pokaże się tylko przycisk fotogalerii
', verbose_name='Przyciski'), + ), + migrations.AlterField( + model_name='tournamentpage', + name='fee_and_prizes_buttons', + field=models.TextField(blank=True, default='', help_text='Tutaj można wpisać dowolną ilość przycisków w następującym formacie:

tekst1 -> link
teskt2 | link
...

Symbol -> oznacza, że link będzie otwarty w nowej karcie
Symbol | oznacza, że link będzie otwarty w tej samej karcie
Na przykład:

pzbs -> https://pzbs.pl
fotogaleria | https://galeria.podlaskizbs.pl
cezar -> https://www.msc.com.pl/cezar

PZBS i Cezar zostaną otwarte w nowej karcie
UWAGA !!
Gdy nie podamy tekstu przyciku, nie pokaże on się, można to wykorzystać w taki sposób:

-> link do wyników
fotogaleria -> link do fotogalerii

Wtedy pokaże się tylko przycisk fotogalerii
', verbose_name='Przyciski'), + ), + migrations.AlterField( + model_name='tournamentpage', + name='homepage_buttons', + field=models.TextField(blank=True, default='', help_text='Tutaj można wpisać dowolną ilość przycisków w następującym formacie:

tekst1 -> link
teskt2 | link
...

Symbol -> oznacza, że link będzie otwarty w nowej karcie
Symbol | oznacza, że link będzie otwarty w tej samej karcie
Na przykład:

pzbs -> https://pzbs.pl
fotogaleria | https://galeria.podlaskizbs.pl
cezar -> https://www.msc.com.pl/cezar

PZBS i Cezar zostaną otwarte w nowej karcie
UWAGA !!
Gdy nie podamy tekstu przyciku, nie pokaże on się, można to wykorzystać w taki sposób:

-> link do wyników
fotogaleria -> link do fotogalerii

Wtedy pokaże się tylko przycisk fotogalerii
', verbose_name='Przyciski'), + ), + migrations.AlterField( + model_name='tournamentpage', + name='registration_buttons', + field=models.TextField(blank=True, default='', help_text='Tutaj można wpisać dowolną ilość przycisków w następującym formacie:

tekst1 -> link
teskt2 | link
...

Symbol -> oznacza, że link będzie otwarty w nowej karcie
Symbol | oznacza, że link będzie otwarty w tej samej karcie
Na przykład:

pzbs -> https://pzbs.pl
fotogaleria | https://galeria.podlaskizbs.pl
cezar -> https://www.msc.com.pl/cezar

PZBS i Cezar zostaną otwarte w nowej karcie
UWAGA !!
Gdy nie podamy tekstu przyciku, nie pokaże on się, można to wykorzystać w taki sposób:

-> link do wyników
fotogaleria -> link do fotogalerii

Wtedy pokaże się tylko przycisk fotogalerii
', verbose_name='Przyciski'), + ), + migrations.AlterField( + model_name='tournamentpage', + name='rules_buttons', + field=models.TextField(blank=True, default='', help_text='Tutaj można wpisać dowolną ilość przycisków w następującym formacie:

tekst1 -> link
teskt2 | link
...

Symbol -> oznacza, że link będzie otwarty w nowej karcie
Symbol | oznacza, że link będzie otwarty w tej samej karcie
Na przykład:

pzbs -> https://pzbs.pl
fotogaleria | https://galeria.podlaskizbs.pl
cezar -> https://www.msc.com.pl/cezar

PZBS i Cezar zostaną otwarte w nowej karcie
UWAGA !!
Gdy nie podamy tekstu przyciku, nie pokaże on się, można to wykorzystać w taki sposób:

-> link do wyników
fotogaleria -> link do fotogalerii

Wtedy pokaże się tylko przycisk fotogalerii
', verbose_name='Przyciski'), + ), + migrations.AlterField( + model_name='tournamentpage', + name='schedule_and_results_buttons', + field=models.TextField(blank=True, default='', help_text='Tutaj można wpisać dowolną ilość przycisków w następującym formacie:

tekst1 -> link
teskt2 | link
...

Symbol -> oznacza, że link będzie otwarty w nowej karcie
Symbol | oznacza, że link będzie otwarty w tej samej karcie
Na przykład:

pzbs -> https://pzbs.pl
fotogaleria | https://galeria.podlaskizbs.pl
cezar -> https://www.msc.com.pl/cezar

PZBS i Cezar zostaną otwarte w nowej karcie
UWAGA !!
Gdy nie podamy tekstu przyciku, nie pokaże on się, można to wykorzystać w taki sposób:

-> link do wyników
fotogaleria -> link do fotogalerii

Wtedy pokaże się tylko przycisk fotogalerii
', verbose_name='Przyciski'), + ), + ] diff --git a/tournamentpages/models.py b/tournamentpages/models.py index ebf89dc..393376c 100644 --- a/tournamentpages/models.py +++ b/tournamentpages/models.py @@ -2,35 +2,11 @@ from django.db import models from django.urls.base import reverse_lazy from django.utils.safestring import mark_safe from tinymce.models import HTMLField +from db.help import buttons_help_text # Create your models here. -buttons_help_text = """Tutaj można wpisać dowolną ilość przycisków w następującym formacie: - - tekst1 -> link - tekst2 | link - ... - - Symbol -> oznacza, że link będzie otwarty w nowej karcie - Symbol | oznacza, że link będzie otwarty w tej samej karcie - Na przykład: - - pzbs -> https://pzbs.pl - fotogaleria | https://galeria.podlaskizbs.pl - cezar -> https://www.msc.com.pl/cezar - - PZBS i Cezar zostaną otwarte w nowej karcie - UWAGA !! - Klikając na zdjęcie zawsze zostaniemy przekierowani na pierwszy podany link - Gdy nie podamy tekstu przyciku, nie pokaże on się, można to wykorzystać w taki sposób: - - -> link do wyników - fotogaleria -> link do fotogalerii - - Wtedy pokaże się tylko przycisk fotogalerii, a zdjęcie przekieruje nas do wyników! - """.replace('\n', '
') - class TournamentPage(models.Model): name = models.CharField('Nazwa', max_length=250) @@ -39,10 +15,12 @@ class TournamentPage(models.Model): header = HTMLField('Nagłówek', default='', blank=True) footer = HTMLField('Stopka', default='', blank=True) + homepage_rename = models.CharField('Nazwa przycisku', default='Strona główna', max_length=250) homepage = HTMLField('Strona główna', default='', blank=True) homepage_buttons = models.TextField( 'Przyciski', default='', blank=True, help_text=buttons_help_text) + schedule_and_results_rename = models.CharField('Nazwa przycisku', default='Harmonogram i wyniki', max_length=250) schedule_and_results = HTMLField( 'Harmonogram i wyniki', default='', blank=True) schedule_and_results_enabled = models.BooleanField( @@ -50,29 +28,34 @@ class TournamentPage(models.Model): schedule_and_results_buttons = models.TextField( 'Przyciski', default='', blank=True, help_text=buttons_help_text) + registration_rename = models.CharField('Nazwa przycisku', default='Rejestracja', max_length=250) registration = HTMLField('Rejestracja', default='', blank=True) registration_enabled = models.BooleanField( 'Strona włączona', default=False) registration_buttons = models.TextField( 'Przyciski', default='', blank=True, help_text=buttons_help_text) + rules_rename = models.CharField('Nazwa przycisku', default='Regulamin', max_length=250) rules = HTMLField('Regulamin', default='', blank=True) rules_enabled = models.BooleanField('Strona włączona', default=False) rules_buttons = models.TextField( 'Przyciski', default='', blank=True, help_text=buttons_help_text) + fee_and_prizes_rename = models.CharField('Nazwa przycisku', default='Wpisowe i nagrody', max_length=250) fee_and_prizes = HTMLField('Wpisowe i nagrody', default='', blank=True) fee_and_prizes_enabled = models.BooleanField( 'Strona włączona', default=False) fee_and_prizes_buttons = models.TextField( 'Przyciski', default='', blank=True, help_text=buttons_help_text) + accomodation_rename = models.CharField('Nazwa przycisku', default='Noclegi', max_length=250) accomodation = HTMLField('Noclegi', default='', blank=True) accomodation_enabled = models.BooleanField( 'Strona włączona', default=False) accomodation_buttons = models.TextField( 'Przyciski', default='', blank=True, help_text=buttons_help_text) + contact_rename = models.CharField('Nazwa przycisku', default='Kontakt', max_length=250) contact = HTMLField('Kontakt', default='', blank=True) contact_enabled = models.BooleanField('Strona włączona', default=False) contact_buttons = models.TextField( diff --git a/tournamentpages/templates/tournament.html b/tournamentpages/templates/tournament.html index 409532f..48490f9 100644 --- a/tournamentpages/templates/tournament.html +++ b/tournamentpages/templates/tournament.html @@ -34,36 +34,18 @@
{{ t.header | safe}}
diff --git a/tournamentpages/urls.py b/tournamentpages/urls.py index 59fe5e7..10d689c 100644 --- a/tournamentpages/urls.py +++ b/tournamentpages/urls.py @@ -4,11 +4,5 @@ from .views import * urlpatterns = [ path('', HomeView.as_view(), name='homepage'), - path('/wyniki', ScheduleAndResultsView.as_view(), - name='schedule_and_results'), - path('/rejestracja', RegistrationView.as_view(), name='registration'), - path('/regulamin', RulesView.as_view(), name='rules'), - path('/nagrody', FeeAndPrizesView.as_view(), name='fee_and_prizes'), - path('/noclegi', AccomodationView.as_view(), name='accomodation'), - path('/kontakt', ContactView.as_view(), name='contact'), + path('/', PageView.as_view(), name='page'), ] diff --git a/tournamentpages/views.py b/tournamentpages/views.py index 7d2f098..aeca64b 100644 --- a/tournamentpages/views.py +++ b/tournamentpages/views.py @@ -1,16 +1,85 @@ from django.shortcuts import render from django.views.generic import TemplateView +from django.utils.text import slugify + from .models import TournamentPage # Create your views here. +def func(id, page): + t = TournamentPage.objects.get( + id=id, published=True) + + remap = { + 'wyniki': 'schedule_and_results', + 'rejestracja': 'registration', + 'regulamin': 'rules', + 'nagrody': 'fee_and_prizes', + 'noclegi': 'accomodation', + 'kontakt': 'contact', + f'{slugify(t.schedule_and_results_rename)}': 'schedule_and_results', + f'{slugify(t.registration_rename)}': 'registration', + f'{slugify(t.rules_rename)}': 'rules', + f'{slugify(t.fee_and_prizes_rename)}': 'fee_and_prizes', + f'{slugify(t.accomodation_rename)}': 'accomodation', + f'{slugify(t.contact_rename)}': 'contact' + } + + rename = { + 'schedule_and_results': (t.schedule_and_results_rename, slugify(t.schedule_and_results_rename)) if t.schedule_and_results_enabled else '', + 'registration': (t.registration_rename, slugify(t.registration_rename)) if t.registration_enabled else '', + 'rules': (t.rules_rename, slugify(t.rules_rename)) if t.rules_enabled else '', + 'fee_and_prizes': (t.fee_and_prizes_rename, slugify(t.fee_and_prizes_rename)) if t.fee_and_prizes_enabled else '', + 'accomodation': (t.accomodation_rename, slugify(t.accomodation_rename)) if t.accomodation_enabled else '', + 'contact': (t.contact_rename, slugify(t.contact_rename)) if t.contact_enabled else '', + } + + page = remap[page] if page in remap else page + + return {'t': t, 'rename': rename, 'content': t.__dict__[page], 'content_buttons': t.__dict__[f'{page}_buttons'], 'page': page} + class HomeView(TemplateView): template_name = "tournament.html" def get_context_data(self, id, **kwargs): - t = TournamentPage.objects.get(id=id, published=True) - return {'t': t, 'content': t.homepage, 'content_buttons': t.homepage_buttons, 'homepage': True} + return func(id, 'homepage') + + +class PageView(TemplateView): + template_name = "tournament.html" + + def get_context_data(self, id, page, **kwargs): + t = TournamentPage.objects.get( + id=id, published=True) + + remap = { + 'wyniki': 'schedule_and_results', + 'rejestracja': 'registration', + 'regulamin': 'rules', + 'nagrody': 'fee_and_prizes', + 'noclegi': 'accomodation', + 'kontakt': 'contact', + f'{slugify(t.schedule_and_results_rename)}': 'schedule_and_results', + f'{slugify(t.registration_rename)}': 'registration', + f'{slugify(t.rules_rename)}': 'rules', + f'{slugify(t.fee_and_prizes_rename)}': 'fee_and_prizes', + f'{slugify(t.accomodation_rename)}': 'accomodation', + f'{slugify(t.contact_rename)}': 'contact' + } + + rename = { + 'schedule_and_results': (t.schedule_and_results_rename, slugify(t.schedule_and_results_rename)) if t.schedule_and_results_enabled else '', + 'registration': (t.registration_rename, slugify(t.registration_rename)) if t.registration_enabled else '', + 'rules': (t.rules_rename, slugify(t.rules_rename)) if t.rules_enabled else '', + 'fee_and_prizes': (t.fee_and_prizes_rename, slugify(t.fee_and_prizes_rename)) if t.fee_and_prizes_enabled else '', + 'accomodation': (t.accomodation_rename, slugify(t.accomodation_rename)) if t.accomodation_enabled else '', + 'contact': (t.contact_rename, slugify(t.contact_rename)) if t.contact_enabled else '', + } + + page = remap[page] if page in remap else page + + return {'t': t, 'rename': rename, 'content': t.__dict__[page], 'content_buttons': t.__dict__[f'{page}_buttons'], 'page': page} class ScheduleAndResultsView(TemplateView):