Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在不重新启动服务器的情况下,对admin所做的Django更改不会反映在模板中_Python_Django_Django Templates_Django Views - Fatal编程技术网

Python 在不重新启动服务器的情况下,对admin所做的Django更改不会反映在模板中

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

除非重新启动服务器,否则不会反映我从管理界面对数据库所做的更改

这是我的models.py文件-

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。非常感谢:-)。你不知道你救了我多少麻烦。