【问题标题】:Django session variable value lost after refreshing a page刷新页面后 Django 会话变量值丢失
【发布时间】:2014-10-01 13:46:29
【问题描述】:

在我看来,我正在尝试使用 Django 会话保存一些信息,所以在我的 views.py 中我有这个:

def shop_product(request, slug):
    tshirt = Tshirt.objects.get(slug=slug)

    request.session['items'] = []  
    product = {}

    if(request.GET.get('add')):
        product['name'] = tshirt.title
        product['price'] = tshirt.price_reg
        request.session['items'].append(product)
        request.session.modified = True


    if(request.GET.get('clear')):
        request.session['items'][:] = []
        request.session.modified = True


    context = {'items' : request.session['items']}


    return render(request, 'shop/shop_product.html', context)

我希望 'items' 数组包含并添加作为 dict 的 'product' 并且在我刷新页面时也可以在网站上的任何位置使用(如其他视图,例如shopping_cart)

问题是,当我在同一页面/视图(如上所述)上刷新页面时,我在检索“项目”时遇到问题。另外,如果我转到其他页面然后返回原始页面,则“项目”中的值消失了。此外,该值在任何其他页面/视图上均不可用。

我的模板/html 看起来像这样:

<form action="#" method="get">
    <input type="submit" class="add" name="add">
    <input type="submit" value="CLEAR" class="clr" name="clear">
</form> 

【问题讨论】:

  • 您在函数开始时明确清除项目。我认为你不想那样做。
  • 是的,这是我犯的一个错误,感谢 Daniel 指出。

标签: python django session


【解决方案1】:

更改您的代码:

def shop_product(request, slug):
    tshirt = Tshirt.objects.get(slug=slug)
    product = {}

    if(request.GET.get('add') and request.GET.get('add')=='add'):
        product['name'] = tshirt.title
        product['price'] = tshirt.price_reg
        request.session['items'].append(product)
        request.session.modified = True


    if(request.GET.get('clear') and request.GET.get('add')=='clear' ):
        request.session['items'] = []
        request.session.modified = True


    context = {'items' : request.session['items']}


    return render(request, 'shop/shop_product.html', context)

然后在你的 HTML 中:

<form action="#" method="get">
    <input type="submit" value="add" class="add" name="add">
    <input type="submit" value="clear" class="clr" name="clear">
</form> 

希望这对你有用。

【讨论】:

  • 感谢 Yogesh 的回答,它保存了 Tshirt 名称和 Tshirt 价格,并且 items 数组是持久的,刷新页面后转到 localhost:8000/cart 它包含所有带有 Tshirt price 和 Tshirt 的字典名称 :) 我认为“清除”按钮没有清空“项目”数组,但没关系,我想我可以修复它,非常感谢您的回答。
  • 更改此行:从 if(request.GET.get('clear') 和 request.GET.get('add')=='clear'):到 if(request.GET. get('clear') 和 request.GET.get('clear')=='clear'):
  • 嗨,Yogesh,你知道 request.session['items'] 发生了什么...异常类型:KeyError 异常值:'items' context = {'shirt_list': shirt_list , 'slug':slug, 'shlist' : shlist, 'tshirt' : tshirt, 'productArray' : request.session['items']}
  • 使用 request.session.get('items')。
猜你喜欢
  • 2014-07-20
  • 2019-05-16
  • 2014-08-16
  • 2016-07-02
  • 2023-03-25
  • 2017-01-13
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多