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>
Моя проблема с этим методом заключается в двух основных вопросах:
- Этот метод работает и если я изменяю данные из админ панели, они будут применены, НО ТОЛЬКО если я перезапустил сервер разработки! (ctrl + c и py manage.py runserver). Где моя проблема? Как я могу решить эту проблему?
- Моя модель сама по себе не очень динамична, и поэтому я также пробую другой метод, который у меня вызывает другие проблемы, и я задал другой вопрос здесь. Теперь, я буду благодарен за ответ на любой из этих вопросов!
Вы получаете экземпляр 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
в вашем файле настроек. Вы можете посмотреть доступные опции в официальной документации