Python 在不重新启动服务器的情况下,对admin所做的Django更改不会反映在模板中
除非重新启动服务器,否则不会反映我从管理界面对数据库所做的更改 这是我的models.py文件-Python 在不重新启动服务器的情况下,对admin所做的Django更改不会反映在模板中,python,django,django-templates,django-views,Python,Django,Django Templates,Django Views,除非重新启动服务器,否则不会反映我从管理界面对数据库所做的更改 这是我的models.py文件- class InventoryManager(models.Manager): def getActiveId(self): return self.filter(currentlyActive=True) .... .... class Inventory(models.Model): .... .... .... na
class InventoryManager(models.Manager):
def getActiveId(self):
return self.filter(currentlyActive=True)
....
....
class Inventory(models.Model):
....
....
....
name = models.CharField(_("item name"),max_length=30)
category = models.CharField(_("breakfast/lunch/dinner"), max_length=2,choices=TIME_OF_SERVICE, default="lunch")
foodType = models.CharField(_("veg/non-veg"), max_length=7,choices=TYPE_OF_FOOD, default="veg")
stock = models.IntegerField(_("stock quantity"))
image = models.ImageField(_("food item photo"),upload_to='images/',null=True)
currentlyActive = models.BooleanField(_("active/inactive for the day"),default=0)
description = models.CharField(_("food item description"),max_length=150)
objects = InventoryManager()
def __str__(self):
return self.name
....
....
在这里,我将筛选出数据库中具有currentlyActive
为True
的条目
现在,在我的views.py
文件中:
def getActiveItems():
idList = []
query = Inventory.objects.getActiveId().values()
for i in query:
idList.append(i['id'])
return idList
def menu(request,Id):
photos = []
menu = []
for i in xrange(len(Id)):
photos.append(str(Inventory.objects.values().get(id=Id[i])['image']))
menu.append(str(Inventory.objects.values().get(id=Id[i])['name']))
print menu
context={'imageList': zip(photos,menu)}
return render(request,'menu.html', context)
url.py
文件-
....
....
urlpatterns = patterns('',
url(r'^$', menu, {'Id' : getActiveItems()}),
url(r'^admin/', include(admin.site.urls)),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
最后是menu.html
模板文件-
....
....
{% block content %}
{% for image,menu in imageList %}
<div style = "display:block">
<img src="{{ MEDIA_URL }}{{ image }}">
<p>{{ menu }}</p>
</div>
{% endfor %}
{% endblock %}
。。。。
....
{%block content%}
{%对于图像,图像列表中的菜单%}
{{menu}}
{%endfor%}
{%endblock%}
现在,在菜单
函数中,我使用了打印菜单
语句来打印数据库中当前处于活动状态的项目
当我在数据库中更改currentlyActive boolean,然后加载页面时,打印菜单
会显示正确的值。
(例如,当数据库中的第二、第三和第四个条目currentlyActive设置为True时,“打印”菜单显示我[2,3,4]
。当我将第五个条目的currentlyActive设置为True,然后加载主页面时,它确实显示我[2,3,4,5]
)
因此,我在呈现模板或调用菜单函数时发现了问题所在
当终止本地服务器并重新启动它时,更改将完美地反映在渲染模板中
无法找出发生这种情况的原因。问题既不是呈现模板时的问题,也不是调用函数时的问题,而是url定义中的问题 URL.py仅在服务器首次启动时计算一次。所以当你写作时:
url(r'^$', menu, {'Id' : getActiveItems()}),
然后计算getActiveItems,并且不会再次调用它(直到重新启动服务器)
您不应该从URL.py调用getActiveItems并将其结果传递到菜单视图,而应该从视图内部调用它
url.py
....
urlpatterns = patterns('',
url(r'^$', menu),
url(r'^admin/', include(admin.site.urls)),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
views.py
...
def menu(request):
Id = getActiveItems()
photos = []
menu = []
...
如果您计划从其他地方使用Id参数调用视图,请将其设置为非强制性,并且仅在参数为null时调用getActiveItems。非常感谢:-)。你不知道你救了我多少麻烦。