Django:更新模板后,在浏览器中刷新页面时不会反映更改

Django: After updating a template, the changes are not reflected upon refreshing the page in the browser

我正在我的 Django 应用程序中测试基于 class 的视图。我目前正在开发中,所以我希望在对模板进行任何更改后立即在浏览器中看到更改。

主应用urls.py如下:

urlpatterns = [
    path('myapp/', include('myapp.urls')),
]

urls.py 我的应用:

from django.urls import path, include
from . import views

urlpatterns = [
    path('all/', views.AllView.as_view(), name="myapp-all"),
]

myapp 中的 views.py 文件如下所示:

from django.views import View
from django.template import loader
from django.http import HttpResponse

# Create your views here.
class AllView(View):
    template = loader.get_template('myapp/all.html')
    
    def get(self, request, *args, **kwargs):
        return HttpResponse(self.template.render(request=request))

all.html 模板如下所示:

{% extends 'base.html' %}
{% block title %} Example Table {% endblock %}

{% block content %}
<div class="d-flex justify-content-center">
    <div class="col-8">
        <table class="table table-striped">
            <thead>
              <tr>
                <th scope="col">#</th>
                <th scope="col">First</th>
                <th scope="col">Last</th>
                <th scope="col">Handle</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <th scope="row">1</th>
                <td>Mark</td>
                <td>Otto</td>
                <td>@mdo</td>
              </tr>
              <tr>
                <th scope="row">2</th>
                <td>Jacob</td>
                <td>Thornton</td>
                <td>@fat</td>
              </tr>
              <tr>
                <th scope="row">3</th>
                <td colspan="2">Larry the Bird</td>
                <td>@twitter</td>
              </tr>
            </tbody>
          </table>
    </div>
</div>
{% endblock %}

以上模板保存在以下目录: base_directory -> myapp -> 模板 -> myapp -> all.html

settings.py文件有如下配置:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['core/templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

DEBUG = True

如您所见,APP_DIRS 设置为 true。 如果我更改模板中的任何内容并在浏览器中刷新页面(由 url 创建),更改不会反映出来,我需要重新启动服务器才能看到更改。我在这里做错了什么?

我猜你的模板只在初始化期间加载:

loader.get_template('myapp/all.html')

您可以尝试以下方法,django documentation也建议:

class AllView(View):
   template_name = 'myapp/all.html'

    def get(self, request, *args, **kwargs):
        return render(request, self.template_name)

的如果你只需要渲染一个模板,你可以使用TemplateView:

from django.views.generic import TemplateView

class AboutView(TemplateView):
    template_name = 'myapp/all.html'

我相信你通过加载器渲染模板的方式有些问题,默认情况下模板文件是在每次请求时从磁盘读取的,所以如果你只是渲染一个模板,则不需要重新启动任何东西, 我建议你使用 TemplateView

from django.views.generic.base import TemplateView


class AllView(TemplateView):
    template_name = "myapp/all.html"

有一个缓存模板加载器,但默认情况下是禁用的。有关详细信息,请参阅 documentation