如何在首页上发布帖子?

时间:2020-08-08 16:58:42

标签: python django django-models

我有一些代码:

models.py (模型帖子)

STATUS = (
    (0,"Draft"),
    (1,"Publish")
)
 

 class Post(models.Model):

    title = models.CharField(max_length=200, unique=True db_index=True )
    slug = models.SlugField(max_length=200, unique=True)
    updated_on = models.DateTimeField(auto_now= True)   
    publish = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=0)

views.py

class PostList(generic.ListView):

    queryset= Post.objects.filter(status=1).order_by('-publish')
    template_name = 'index.html'
    paginate_by = 6

urls.py

 path('', views.PostList.as_view(), name='home'),

在管理控制台中创建文章后,单击“发布”,该文章未显示在主页上。但是,如果重新启动服务器(manage.py运行服务器),则该文章将显示在主页上。

问题: 如何使文章出现在页面重新加载且不需要服务器重启的情况下?

2 个答案:

答案 0 :(得分:0)

我曾经有一个网站遇到过类似的问题。我发现缓存没有足够频繁地刷新(因为更新/更改的页面没有缓存在我的浏览器中,所以好像它不可见)。解决方案是(在服务器端)更新.htaccess文件。关键是“缓存控制”。就我而言,代码如下:

<filesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|html)$">
    Header set Cache-Control "max-age=1200, public, must-revalidate"
</filesMatch> 

这里是更多信息: https://www.imperva.com/learn/performance/cache-control/

答案 1 :(得分:0)

事实证明,采用这种结构:

views.py

class PostList(generic.ListView):
  queryset= Post.objects.filter(status=1).order_by('-publish')
  template_name = 'index.html'
  paginate_by = 6

我们仅在服务器重启时从数据库中读取帖子。

我创建了这样的功能,它有助于解决问题

def postlist(request):
  queryset= Post.objects.filter(status=1).order_by('-publish')
  return render (request, index.html, {'queryset': queryset})