Модели Django. Как импортировать текстовое поле модели во все приложения проекта?
В проекте несколько приложений. Базовые шаблоны отдельно для каждого app.
app1--
templates
--base.html
app2--
templates
--base.html
app3--
templates
--base.html
app4--
templates
--base.html
-models.py
В каждом шаблоне есть повторяющийся html блок содержащий ссылку и текстовое поле:
*<a class="nav__link" href="https://somelink.net">запись на приём</a>*
В app4 есть модель для текстового поля и ссылки. Как сделать так, чтобы во всех app нужный блок html шаблона base.html менялся при изменении данных модели app4 в админке?
-models.py
from django.db import models
class PublishedManager(models.Manager):
def get_queryset(self):
return super().get_queryset()\
.filter(status=Dikidi.Status.PUBLISHED)
class Dikidi(models.Model):
class Status(models.TextChoices):
DRAFT = 'DF', 'Draft'
PUBLISHED = 'PB', 'Published'
title_dikidi = models.CharField(max_length=200, verbose_name='Заголовок')
dikidi_yaroute = models.CharField(max_length=250, verbose_name='Dikidi ссылка')
status = models.CharField(max_length=2,
choices=Status.choices,
default=Status.DRAFT)
objects = models.Manager() # менеджер, применяемый по умолчанию
published = PublishedManager() # конкретно-прикладной менеджер
def __str__(self):
return self.title_dikidi
class Meta:
verbose_name = 'Dikidi'
verbose_name_plural = 'Dikidi'
-views
from django.shortcuts import render
from .models import Dikidi
def home(request):
if request.method == 'POST':
form = Dikidi(request.POST)
if form.is_valid():
context = {
post_list: form.cleaned_data[post_list]
}
return render(request, 'dikidi/post/list.html', context)
else:
return render(request, 'dikidi/post/list.html', {
'form': form
})
return render(request, 'dikidi/post/list.html', {
'form': Dikidi()
})
def post_list(request):
posts = Dikidi.published.all()
return render(request,
'dikidi/post/list.html',
{'posts': posts})
-urls
from django.urls import path
from .import views
app_name = 'dikidi'
urlpatterns = [
# представления поста
path('', views.post_list, name='post_list'),
]
шаблон app4
{% extends "dikidi/base.html" %}
{% block content %}
{% for post in posts %}
<a href={{ post.dikidi_yaroute }}>записаться на приём</a>
{{ post.body|truncatewords:30|linebreaks }}
{% endfor %}
{% endblock %}
Понимаю что копать нужно в сторону импорта моделей. Прочитал документацию в соответсвующем разделе. Но КАК КОНКРЕТНО реализовать так и не пойму - def post_list
без block content
не работает, а делать отдельное приложение и модели для ссылки и перелапачивать код во всех app слишком долго, да и хотелось бы из админки править одну модель а не все четыре. Подозреваю что решение наверняка есть но вот какое моих нубских мозгов не хватает. Помогите пожалуйста!