resolved most of issues
rodzic
8ec0bc7ad1
commit
b8657c1594
|
@ -13,6 +13,8 @@ https://docs.djangoproject.com/en/4.1/ref/settings/
|
|||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
import os
|
||||
import json
|
||||
|
||||
|
||||
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
BASE_DIR = os.path.dirname(PROJECT_DIR)
|
||||
|
||||
|
@ -53,7 +55,12 @@ INSTALLED_APPS = [
|
|||
"phonenumber_field",
|
||||
]
|
||||
|
||||
# Optionalization
|
||||
# Default settings
|
||||
SHOP_ENABLED = False
|
||||
LOGO = 'nologo'
|
||||
NAVBAR_POSITION = 'left'
|
||||
|
||||
if os.path.exists('config.json'):
|
||||
with open(os.path.join(BASE_DIR, 'config.json'), 'r') as file:
|
||||
config_data = json.load(file)
|
||||
|
@ -61,6 +68,8 @@ if os.path.exists('config.json'):
|
|||
if shop_enabled:
|
||||
INSTALLED_APPS.append('store')
|
||||
SHOP_ENABLED = True
|
||||
LOGO = config_data.get('logo', False)
|
||||
NAVBAR_POSITION = config_data.get('navbar_position', False)
|
||||
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
@ -86,9 +95,7 @@ TEMPLATES = [
|
|||
"APP_DIRS": True,
|
||||
"OPTIONS": {
|
||||
"context_processors": [
|
||||
'setup.context_processors.logo_url',
|
||||
'setup.context_processors.menu_position',
|
||||
'setup.context_processors.store_enabled',
|
||||
'setup.context_processors.SetupContextProcessor',
|
||||
"django.template.context_processors.debug",
|
||||
"django.template.context_processors.request",
|
||||
"django.contrib.auth.context_processors.auth",
|
||||
|
|
|
@ -37,18 +37,24 @@
|
|||
{% wagtailuserbar %}
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
{% if menu_left %}
|
||||
<div class="col-md-3 mt-5 ml-2">
|
||||
{% if navbar_position == 'top' %}
|
||||
<div class="col-md-12 mt-5 ml-2">
|
||||
{% main_menu max_levels=3 template="menu/custom_main_menu.html" %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if navbar_position == 'left' %}
|
||||
<div class="col-md-3 mt-5 ml-2">
|
||||
{% main_menu max_levels=3 template="menu/custom_main_menu.html" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="col-md-9 mt-5 ml-2">
|
||||
{% block content %}{% endblock %}
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
{% if not menu_left %}
|
||||
<div class="col-md-3 mt-5 ml-2">
|
||||
{% if navbar_position == 'right' %}
|
||||
<div class="col-md-3 mt-5 ml-2">
|
||||
{% main_menu max_levels=3 template="menu/custom_main_menu.html" %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -25,5 +25,4 @@
|
|||
{% if store_enabled %}
|
||||
<a href={% url 'cart' %} alt="Koszyk" > Koszyk </a>
|
||||
{% endif %}
|
||||
<a href="/setup" alt="Koszyk" > setup </a>
|
||||
</div>
|
||||
|
|
|
@ -12,14 +12,14 @@ from wagtail.documents import urls as wagtaildocs_urls
|
|||
|
||||
from search import views as search_views
|
||||
|
||||
from setup.views import setup_page as setup_view
|
||||
from setup.views import SetupPageView as setup_view
|
||||
|
||||
urlpatterns = [
|
||||
path("django-admin/", admin.site.urls),
|
||||
path("admin/", include(wagtailadmin_urls)),
|
||||
path("documents/", include(wagtaildocs_urls)),
|
||||
path("search/", search_views.search, name="search"),
|
||||
path('setup/', setup_view, name='setup_page'),
|
||||
path('setup/', setup_view.as_view(), name='setup_page'),
|
||||
]
|
||||
|
||||
store_app_enabled = getattr(settings, 'SHOP_ENABLED', False)
|
||||
|
|
|
@ -1,25 +1,12 @@
|
|||
from .models import SiteConfiguration
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
def logo_url(request):
|
||||
config = SiteConfiguration.objects.first()
|
||||
if config.logo:
|
||||
logo_url = config.logo.url
|
||||
else:
|
||||
None
|
||||
return {'logo_url': logo_url}
|
||||
|
||||
|
||||
def menu_position(request):
|
||||
config = SiteConfiguration.objects.first()
|
||||
if config.navbar_position == 'left':
|
||||
menu_left = True
|
||||
else:
|
||||
menu_left = False
|
||||
return {'menu_left': menu_left}
|
||||
|
||||
|
||||
def store_enabled(request):
|
||||
store_enabled = getattr(settings, 'SHOP_ENABLED', False)
|
||||
return {'store_enabled': store_enabled}
|
||||
def SetupContextProcessor(request):
|
||||
navbar_position = settings.NAVBAR_POSITION
|
||||
logo = settings.LOGO
|
||||
shop_enabled = settings.SHOP_ENABLED
|
||||
return {
|
||||
'navbar_position': navbar_position,
|
||||
'logo_url': logo,
|
||||
'shop_enabled': shop_enabled,
|
||||
}
|
||||
|
|
|
@ -1,12 +1,27 @@
|
|||
from django import forms
|
||||
from .models import SiteConfiguration
|
||||
from django.conf import settings
|
||||
import os
|
||||
|
||||
|
||||
class SiteConfigurationForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = SiteConfiguration
|
||||
exclude = ()
|
||||
class SiteConfigurationForm(forms.Form):
|
||||
logo = forms.ImageField(required=False)
|
||||
shop_enabled = forms.BooleanField(required=False)
|
||||
navbar_position = forms.ChoiceField(
|
||||
choices=[
|
||||
('left', 'Left'),
|
||||
('right', 'Right'),
|
||||
('top', 'Top'),
|
||||
],
|
||||
initial='left',
|
||||
widget=forms.RadioSelect
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['navbar_position'].widget.attrs['class'] = 'custom-select'
|
||||
def save_logo(self):
|
||||
if self.cleaned_data['logo']:
|
||||
logo = self.cleaned_data['logo']
|
||||
filename = os.path.join(settings.MEDIA_ROOT, 'images/icons', logo.name)
|
||||
with open(filename, 'wb') as f:
|
||||
for chunk in logo.chunks():
|
||||
f.write(chunk)
|
||||
return os.path.join('images/icons', logo.name)
|
||||
return None
|
||||
|
|
|
@ -10,5 +10,7 @@ class CheckSetupMiddleware(object):
|
|||
if not os.path.exists('config.json') and not request.path_info.startswith('/setup'):
|
||||
return redirect('/setup/')
|
||||
|
||||
if os.path.exists('config.json') and request.path_info.startswith('/setup'):
|
||||
return redirect('/')
|
||||
response = self.get_response(request)
|
||||
return response
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
# Generated by Django 4.1.9 on 2023-06-14 00:03
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
initial = True
|
||||
|
||||
dependencies = []
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="SiteConfiguration",
|
||||
fields=[
|
||||
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
||||
("logo", models.ImageField(blank=True, null=True, upload_to="logo/")),
|
||||
("shop_enabled", models.BooleanField(default=True)),
|
||||
("homepage", models.CharField(blank=True, max_length=255, null=True)),
|
||||
("navbar_position", models.CharField(default="left", max_length=20)),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -1,27 +0,0 @@
|
|||
# Generated by Django 4.1.9 on 2023-06-15 01:33
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("setup", "0001_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="siteconfiguration",
|
||||
name="isSetup",
|
||||
field=models.BooleanField(default=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="siteconfiguration",
|
||||
name="logo",
|
||||
field=models.ImageField(blank=True, null=True, upload_to="images/icons"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="siteconfiguration",
|
||||
name="navbar_position",
|
||||
field=models.CharField(choices=[("left", "Left"), ("right", "Right")], default="left", max_length=20),
|
||||
),
|
||||
]
|
|
@ -1,13 +0,0 @@
|
|||
from django.db import models
|
||||
|
||||
|
||||
class SiteConfiguration(models.Model):
|
||||
logo = models.ImageField(upload_to='images/icons', null=True, blank=True)
|
||||
shop_enabled = models.BooleanField(default=True)
|
||||
homepage = models.CharField(max_length=255, null=True, blank=True)
|
||||
|
||||
NAVBAR_POSITION_CHOICES = [
|
||||
('left', 'Left'),
|
||||
('right', 'Right'),
|
||||
]
|
||||
navbar_position = models.CharField(max_length=20, choices=NAVBAR_POSITION_CHOICES, default='left')
|
|
@ -1,18 +1,25 @@
|
|||
from django.shortcuts import render, redirect
|
||||
from .models import SiteConfiguration
|
||||
from django.views import View
|
||||
from .forms import SiteConfigurationForm
|
||||
import json
|
||||
|
||||
|
||||
def setup_page(request):
|
||||
config = SiteConfiguration.objects.first()
|
||||
class SetupPageView(View):
|
||||
template_name = 'setup.html'
|
||||
|
||||
if request.method == 'POST':
|
||||
form = SiteConfigurationForm(request.POST, request.FILES, instance=config)
|
||||
def get(self, request):
|
||||
form = SiteConfigurationForm()
|
||||
return render(request, self.template_name, {'form': form})
|
||||
|
||||
def post(self, request):
|
||||
form = SiteConfigurationForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
form_data = form.cleaned_data
|
||||
form_data['logo'] = str(form_data['logo'])
|
||||
logo_path = form.save_logo()
|
||||
if logo_path:
|
||||
form_data['logo'] = 'media/' + logo_path
|
||||
else:
|
||||
form_data['logo'] = None
|
||||
|
||||
json_data = json.dumps(form_data, indent=4)
|
||||
|
||||
|
@ -20,7 +27,5 @@ def setup_page(request):
|
|||
file.write(json_data)
|
||||
|
||||
return redirect('/')
|
||||
else:
|
||||
form = SiteConfigurationForm(instance=config)
|
||||
|
||||
return render(request, 'setup.html', {'form': form})
|
||||
else:
|
||||
return render(request, self.template_name, {'form': form})
|
||||
|
|
Ładowanie…
Reference in New Issue