add urls and vars

This commit is contained in:
doesnm 2024-08-13 14:41:25 +03:00
parent 62cd51a04c
commit 3558441b43
Signed by: doesnm
SSH key fingerprint: SHA256:fSXBOeK0SXxGqmbQ2pKhSvH3TF0kCijXZfzh3gHfQYM
10 changed files with 137 additions and 19 deletions

View file

@ -2,7 +2,7 @@ from django.contrib import admin
from django.contrib.auth.admin import UserAdmin,GroupAdmin
from django.contrib.auth.models import User, Group
from unfold.admin import ModelAdmin
from .models import Site, Page
from .models import Site, Page, Url, Variable
admin.site.unregister(Group)
admin.site.unregister(User)
@ -16,4 +16,11 @@ class GroupAdmin(GroupAdmin, ModelAdmin): pass
class SiteAdmin(ModelAdmin): pass
@admin.register(Page)
class PageAdmin(ModelAdmin): pass
class PageAdmin(ModelAdmin): pass
@admin.register(Url)
class UrlAdmin(ModelAdmin): pass
@admin.register(Variable)
class VariableAdmin(ModelAdmin): pass

View file

@ -0,0 +1,37 @@
# Generated by Django 5.1 on 2024-08-13 10:04
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('cmsMain', '0001_initial'),
]
operations = [
migrations.AlterModelOptions(
name='site',
options={'verbose_name': 'Сайт', 'verbose_name_plural': 'Сайтов'},
),
migrations.AddField(
model_name='page',
name='title',
field=models.CharField(default='Главная страница', max_length=50, verbose_name='Название'),
preserve_default=False,
),
migrations.CreateModel(
name='Url',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('path', models.CharField(max_length=50, verbose_name='Путь')),
('page', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='cmsMain.page', verbose_name='Страница')),
('site', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='cmsMain.site', verbose_name='Сайт')),
],
options={
'verbose_name': 'Ссылка',
'verbose_name_plural': 'Ссылок',
},
),
]

View file

@ -0,0 +1,21 @@
# Generated by Django 5.1 on 2024-08-13 11:17
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('cmsMain', '0002_alter_site_options_page_title_url'),
]
operations = [
migrations.AlterModelOptions(
name='site',
options={'verbose_name': 'Сайт', 'verbose_name_plural': 'Сайты'},
),
migrations.AlterModelOptions(
name='url',
options={'verbose_name': 'Ссылка', 'verbose_name_plural': 'Ссылки'},
),
]

View file

@ -0,0 +1,25 @@
# Generated by Django 5.1 on 2024-08-13 11:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('cmsMain', '0003_alter_site_options_alter_url_options'),
]
operations = [
migrations.CreateModel(
name='Variable',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50, verbose_name='Имя')),
('value', models.TextField(verbose_name='Значение')),
],
options={
'verbose_name': 'Переменная',
'verbose_name_plural': 'Переменные',
},
),
]

View file

@ -3,7 +3,10 @@ from django.db import models
# Create your models here.
class Page(models.Model):
title = models.CharField("Название",max_length=50)
content = models.TextField("Содержимое")
def __str__(self):
return self.title
class Meta:
verbose_name = "Страница"
verbose_name_plural = "Страницы"
@ -15,4 +18,23 @@ class Site(models.Model):
return self.domain
class Meta:
verbose_name = "Сайт"
verbose_name_plural = "Сайты"
verbose_name_plural = "Сайты"
class Url(models.Model):
site = models.ForeignKey(Site,on_delete=models.PROTECT,verbose_name="Сайт")
path = models.CharField("Путь",max_length=50)
page = models.ForeignKey(Page,on_delete=models.PROTECT,verbose_name="Страница")
def __str__(self):
return f"{self.site.domain}/{self.path}"
class Meta:
verbose_name="Ссылка"
verbose_name_plural="Ссылки"
class Variable(models.Model):
name = models.CharField("Имя",max_length=50)
value = models.TextField("Значение")
def __str__(self):
return self.name
class Meta:
verbose_name = "Переменная"
verbose_name_plural = "Переменные"

View file

@ -1,11 +0,0 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
{{content|safe}}
</body>
</html>

View file

View file

@ -0,0 +1,8 @@
from django import template
from ..models import Variable
register = template.Library()
@register.simple_tag
def var(name):
v = Variable.objects.get(name=name)
if v: return v.value

View file

@ -1,6 +1,7 @@
from django.urls import path, include
from .views import MainView
from .views import MainView, PageView
urlpatterns = [
path('<slug:page>',PageView.as_view()),
path('',MainView.as_view())
]

View file

@ -1,10 +1,18 @@
from django.shortcuts import render, get_object_or_404
from django.views import View
from .models import Site
from django import template
from .models import Site, Url, Variable
from django.http import HttpResponse
context = template.Context({})
class MainView(View):
def get(self,request):
site = get_object_or_404(Site,domain=request.META["HTTP_HOST"])
return render(request,"index.html", {
"content": site.base_page.content
})
t = template.Template(site.base_page.content)
return HttpResponse(t.render(context))
class PageView(View):
def get(self,request,page):
r = get_object_or_404(Url,path=page)
t = template.Template(r.page.content)
return HttpResponse(t.render(context))