This commit is contained in:
2024-04-12 10:12:56 +03:00
commit 049f11f557
26 changed files with 608 additions and 0 deletions

0
djpro/menu/__init__.py Normal file
View File

7
djpro/menu/admin.py Normal file
View File

@@ -0,0 +1,7 @@
from django.contrib import admin
from .models import MenuItem
class MenuItemAdmin(admin.ModelAdmin):
list_display = ('title', 'parent', 'url')
admin.site.register(MenuItem, MenuItemAdmin)

6
djpro/menu/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class MenuConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'menu'

10
djpro/menu/models.py Normal file
View File

@@ -0,0 +1,10 @@
from django.db import models
class MenuItem(models.Model):
title = models.CharField(max_length=100)
parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
url = models.CharField(max_length=100, null=True, blank=True)
def __str__(self):
return self.title

View File

@@ -0,0 +1,12 @@
from django import template
from menu.models import MenuItem
register = template.Library()
@register.simple_tag(takes_context=True)
def draw_menu(context, menu_name):
menu_items = MenuItem.objects.filter(title=menu_name).select_related('parent').prefetch_related('children')
return {
'menu_items': menu_items,
'current_url': context['request'].path,
}

3
djpro/menu/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

6
djpro/menu/urls.py Normal file
View File

@@ -0,0 +1,6 @@
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]

9
djpro/menu/views.py Normal file
View File

@@ -0,0 +1,9 @@
from django.shortcuts import render
from .models import MenuItem
def index(request):
menu_items = MenuItem.objects.all()
context = {
'menu_items': menu_items,
}
return render(request, 'base.html', context)