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。
我正在我的 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。