通过管理员添加数据在html模板中不可见,直到重启服务器(python manage.py runserver)

时间:2017-09-19 15:56:20

标签: python django

实施例

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吗?

2 个答案:

答案 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将知道在每个请求中查询所有书籍。