Skip to content

Commit 494f63e

Browse files
committed
Merge branch 'release/1.3.0b0'
2 parents 3b1d50e + bf75715 commit 494f63e

File tree

340 files changed

+554
-29520
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

340 files changed

+554
-29520
lines changed

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ INSTALLED_APPS = [
4141
'django.contrib.sessions',
4242
'django.contrib.messages',
4343
'django.contrib.staticfiles',
44+
# custom menu base on treebeard
45+
'treebeard',
4446
...
4547
]
4648
```
@@ -67,6 +69,13 @@ python manage.py migrate django_admin_settings
6769
## general_option
6870
![general_option](./images/general_option.jpg)
6971

72+
# Thanks
73+
74+
- [AdminLTE](https://github.com/ColorlibHQ/AdminLTE)
75+
- [django](https://github.com/django/django)
76+
- [django-treebeard](https://github.com/django-treebeard/django-treebeard)
77+
- [django-suit](https://github.com/darklow/django-suit)
78+
7079
# Donate
7180

7281
Your donation take me higher. 🚀

README.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ setup
2727
'django.contrib.sessions',
2828
'django.contrib.messages',
2929
'django.contrib.staticfiles',
30+
# custom menu base on treebeard
31+
'treebeard',
3032
...
3133
]
3234

adminlteui/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
version = '1.2.0'
1+
version = '1.3.0b0'
22
default_app_config = 'adminlteui.apps.AdminlteUIConfig'

adminlteui/admin.py

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@
77
from django.template.response import TemplateResponse
88
from django.utils import timezone
99
from django.utils.translation import gettext_lazy as _
10-
from .models import Options
10+
from django.utils.html import format_html
11+
from django.db import models
12+
from django.conf import settings
13+
from adminlteui.widgets import AdminlteSelect, AdminlteSelectMultiple
14+
from treebeard.admin import TreeAdmin
15+
from treebeard.forms import movenodeform_factory
16+
from .models import Options, Menu
1117

1218

1319
def get_option(option_name):
@@ -20,7 +26,7 @@ def get_option(option_name):
2026

2127
def handle_uploaded_file(f, file_name):
2228
# save site_logo
23-
with open('media/' + file_name, 'wb+') as destination:
29+
with open(settings.MEDIA_ROOT + '/' + file_name, 'wb+') as destination:
2430
for chunk in f.chunks():
2531
destination.write(chunk)
2632

@@ -43,16 +49,19 @@ def get_image_box():
4349
class GeneralOptionForm(forms.Form):
4450
site_title = forms.CharField(label=_('Site Title'),
4551
widget=widgets.AdminTextInputWidget(),
46-
help_text=_("Text to put at the end of each page's tag title."))
52+
help_text=_(
53+
"Text to put at the end of each page's tag title."))
4754
site_header = forms.CharField(label=_('Site Header'),
4855
widget=widgets.AdminTextInputWidget(),
49-
help_text=_("Text to put in base page's tag b."))
56+
help_text=_(
57+
"Text to put in base page's tag b."))
5058
# index_title = forms.CharField(label=_('Index Title'),
5159
# widget=widgets.AdminTextInputWidget())
5260
site_logo = forms.ImageField(label=_('Site Logo'),
5361
widget=forms.ClearableFileInput(),
5462
required=False,
55-
help_text=_("Transparent background picture is a good choice."))
63+
help_text=_(
64+
"Transparent background picture is a good choice."))
5665
welcome_sign = forms.CharField(
5766
label=_('Welcome Sign'),
5867
widget=widgets.AdminTextInputWidget(),
@@ -65,30 +74,41 @@ def save(self):
6574
if self.data.get('site_logo-clear'):
6675
obj = Options.objects.get(option_name='site_logo')
6776
obj.delete()
77+
self.changed_data.remove('site_logo')
6878

6979
for data_item in self.changed_data:
7080
try:
7181
obj = Options.objects.get(option_name=data_item)
7282

7383
if data_item == 'site_logo':
84+
if not settings.MEDIA_ROOT or not settings.MEDIA_URL:
85+
self.errors[data_item] = _(
86+
'site_logo depends on setting.MEDIA_URL and setting.MEDIA_ROOT.')
87+
return False
7488
if not self.files.get(data_item) or self.data.get(
7589
data_item) == '':
7690
continue
7791
handle_uploaded_file(self.files.get(data_item),
7892
self.files.get(data_item).name)
79-
obj.option_value = 'media/' + self.files.get(
93+
obj.option_value = settings.MEDIA_URL.lstrip(
94+
'/') + self.files.get(
8095
data_item).name
8196
else:
8297
if obj.option_value == self.data.get(data_item):
8398
continue
8499
obj.option_value = self.data.get(data_item)
85100
except Options.DoesNotExist:
86101
if data_item == 'site_logo':
102+
if not settings.MEDIA_ROOT or not settings.MEDIA_URL:
103+
self.errors[data_item] = _(
104+
'site_logo depends on setting.MEDIA_URL and setting.MEDIA_ROOT.')
105+
return False
87106
handle_uploaded_file(self.files.get(data_item),
88107
self.files.get(data_item).name)
89108
obj = Options.objects.create(
90109
option_name=data_item,
91-
option_value='media/' + self.files.get(
110+
option_value=settings.MEDIA_URL.lstrip(
111+
'/') + self.files.get(
92112
data_item).name,
93113
create_time=timezone.now())
94114
else:
@@ -168,3 +188,26 @@ def general_option_view(self, request):
168188
context['line'] = form
169189
return TemplateResponse(request, 'adminlte/general_option.html',
170190
context)
191+
192+
193+
@admin.register(Menu)
194+
class MenuAdmin(TreeAdmin):
195+
list_display = ('name', 'position', 'link_type', 'link',
196+
'content_type', 'display_icon',
197+
'valid')
198+
list_filter = ('position', 'link_type', 'valid')
199+
list_editable = ('valid',)
200+
form = movenodeform_factory(Menu)
201+
change_list_template = 'adminlte/menu_change_list.html'
202+
change_form_template = 'adminlte/menu_change_form.html'
203+
formfield_overrides = {
204+
models.ForeignKey: {'widget': AdminlteSelect}
205+
}
206+
207+
def display_icon(self, obj):
208+
if obj.icon:
209+
return format_html(
210+
'<i class="fa {}"></i> {}'.format(obj.icon, obj.icon))
211+
return obj.icon
212+
213+
display_icon.short_description = _('Icon')
764 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)