实施例
models.py
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=200)
admin.py
from django.contrib import admin
from .models import Book
admin.site.register(Book)
类主页(TemplateView):
books = Book.objects.all()
def get_context_data(self, **kwargs):
context ['books'] = self.books
return context
的index.html
{% for b in books %}
<h2> {{ b.name}} </h2>
{% endfor %}
如果我通过Django管理添加新书,我需要重启服务器 为了使新值可见
如果通过djano admin更改了任何数据,我该如何自动刷新视图 无需重启服务器(python manage.py runserver)
所有帮助都会受到赞赏,因为我已经卡住了
我可以在视图中使用refresh_from_db吗?
答案 0 :(得分:1)
由于您已将books
查询集定义为Home
类的属性,因此查询将仅在第一次迭代时进行一次计算。您需要在每个请求上重新创建查询集
class Home(TemplateView):
def get_context_data(self, **kwargs):
context['books'] = Book.objects.all()
return context
答案 1 :(得分:0)
您不应该在这里使用TemplateView。列表视图类涵盖了您正在执行的操作。如果您使用它并定义model
,则根本不需要覆盖get_context_data
。所以它只是:
class Home(ListView):
model = Book
就是这样。 Django将知道在每个请求中查询所有书籍。