Доступ к модели ключ-значение в django для динамического шаблона
Цель состоит в том, чтобы сделать тексты в статических шаблонах, таких как страница "о нас", динамическими с помощью модели, чтобы их можно было легко редактировать в дальнейшем. Мой первый подход заключался в создании статической модели, в которой я должен был задать поле для каждой информации, которую я намереваюсь разместить в своих шаблонах, например, "main_page_intro" или "about_page_company_info" и так далее. Но мой друг подсказал, что такой подход сам по себе статичен и не является правильным. Он предложил мне создать модель только с двумя полями, "key" и "value". "Ключ" для названия места, где должен использоваться текст (например, введение главной страницы), а "значение" для записи фактического текста, который должен отображаться. Итак, сейчас у меня есть такая модель:
models.py
from django.db import models
class SiteDataKeyValue(models.Model):
key = models.CharField(max_length=200, verbose_name="Text place")
value = models.TextField(verbose_name="Text")
def __str__(self):
return self.key
Теперь у меня возникли проблемы с продолжением этого пути и использованием этой модели. Предположим, что я создал объект в этой модели с ключом = "вводный текст главной страницы" и значением = "некоторый текст здесь". Как я должен написать представление для этого и как я должен использовать эти ключи и значения в моем шаблоне?
P.S.: Я просмотрел несколько похожих вопросов, но не смог понять ни одного из них.
Я нашел этот ответ благодаря @DanielB.
Мой views.py:
class HomePageViewKVModel(ListView):
"""
In this view we are fetching site data from database, in a function named
get_context_data. In this function, we filter the model for objects that
contains the word 'اصلی', therefore fetching data referring to the main page
only. After that the context list is sent to the template, and there with a
for loop and an if statement, each key, value set is chosen for the proper
place.
"""
model = SiteDataKeyValue
template_name: str = "core/index.html"
def get_context_data(self, **kwargs):
context = super(HomePageViewKVModel, self).get_context_data(**kwargs)
context["home_page_data"] = self.model.objects.filter(key__contains="اصلی")
return context