在做Django教程时会注意到这个问题。
mysite.com/polls
,民意测验就不存在了:“没有投票。”apachectl restart
或touch mysite/wsgi.py
来获得相同的结果,即新行将在mysite.com/polls
上正确显示为什么在没有重新启动服务器的情况下,新行在创建管理站点后不立即在mysite.com/polls
上显示?
来自urls.py的相关代码:
from django.conf.urls import patterns, url
from django.views.generic import DetailView, ListView
from django.utils import timezone
from polls.models import Poll
urlpatterns = patterns('',
url(r'^$',
ListView.as_view(
queryset=Poll.objects.filter(pub_date__lte=timezone.now) \
.order_by('-pub_date')[:5],
context_object_name='latest_poll_list',
template_name='polls/index.html'),
name='index'),
...
在mysite.com/polls
中没有views.py代码。
mysite.com/polls
的模板代码
{% if latest_poll_list %}
<ul>
{% for poll in latest_poll_list %}
<li>
<a href="{% url 'polls:detail' poll.id %}">{{ poll.question }}</a>
</li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
使用:
额外注释:
SELECT
-able。django.test.client.Client
在管理站点上进行时,新的轮询可以从shell客户端读取。django.test.client.Client
从shell进行新的轮询时,无论是从shell客户机还是在mysite.com/polls
上,都无法读取新的轮询,但是在服务器重新启动之前,它可以从psql
和mysite.com/admin
读取。发布于 2013-03-27 11:27:30
Django中的Queryset通常被计算为“懒惰”,这意味着您可以编写类似于Poll.objects.filter(pub_date__lte=timezone.now).order_by('-pub_date')
的东西一次,然后每次对它进行评估(尝试从它获取数据)时,它就会马上去获取数据。
但是,将[:5]
添加到末尾时会对其进行评估。这意味着您要传递给ListView的实际上不是一个查询集,而是一个值列表;该列表在创建视图时只创建一次,然后永远不会被重新计算。
为了实现您的目标,我建议您在views.py
中创建一个覆盖queryset
方法的自定义queryset
。要获得更多关于如何做到这一点的信息,只需查看医生们即可。
https://stackoverflow.com/questions/15666199
复制相似问题