Django необходимо перезапустить сервер для изменения данных в шаблоне

Цель состоит в том, чтобы сделать тексты в статических шаблонах, таких как страница "О нас", динамическими с помощью модели, чтобы их можно было легко редактировать в дальнейшем. Моя модель выглядит следующим образом:

class SiteData(models.Model):
    data_set_name = models.CharField(
        max_length=200, blank=False, null=False, default="نام مجموعه داده"
    )
    main_page_english_info = models.TextField(
        verbose_name="مقدمه انگلیسی", blank=True, null=True
    )
    main_page_persian_info = models.TextField(
        verbose_name="مقدمه فارسی", blank=True, null=True
    )

Мое мнение таково:

class HomePageView(ListView):
    model = SiteData
    template_name: str = "core/index.html"

    site_data = SiteData.objects.get(pk=1)
    context_vars = {
        "site_data": site_data,
    }

    def get_context_data(self, **kwargs):
        context = super(HomePageView, self).get_context_data(**kwargs)
        context.update(HomePageView.context_vars)
        return context

и мой шаблон:

<p class="mt-3 text-justified text-english fw-semibold nm-text-color"
style="direction: ltr; ">{{ site_data.main_page_english_info }}</p>
            
<p class="mt-3 text-justified nm-text-color">{{ site_data.main_page_persian_info }}</p>

Моя проблема с этим методом заключается в двух основных вопросах:

  1. Этот метод работает и если я изменяю данные из админ панели, они будут применены, НО ТОЛЬКО если я перезапустил сервер разработки! (ctrl + c и py manage.py runserver). Где моя проблема? Как я могу решить эту проблему?
  2. Моя модель сама по себе не очень динамична, и поэтому я также пробую другой метод, который у меня вызывает другие проблемы, и я задал другой вопрос здесь. Теперь, я буду благодарен за ответ на любой из этих вопросов!

Вы получаете экземпляр SiteData при запуске сервера, а не во время запроса. Переместите запрос в метод get_context_data, например,

class HomePageView(ListView):
    model = SiteData
    template_name: str = "core/index.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["site_data"] = self.model.objects.get(pk=1)
        return context

Оригинальный ответ:

По умолчанию используется кэшированный загрузчик (см. раздел загрузчиков здесь), что избавляет django от необходимости читать и разбирать шаблон для каждого запроса.

Я рекомендую оставить это включенным и перезапускать по мере необходимости. Однако, если вам это абсолютно необходимо, вы можете изменить конфигурацию с помощью переменной TEMPLATE в вашем файле настроек. Вы можете посмотреть доступные опции в официальной документации

Вернуться на верх