如何在模板django中请求会话值

Posted

技术标签:

【中文标题】如何在模板django中请求会话值【英文标题】:how to request session value in template django 【发布时间】:2021-10-09 17:18:25 【问题描述】:

我想直接在 myy 模板中获取会话值,我通过该模板请求会话,然后我在另一个 html 中查看该会话

我的views.py在哪里创建了会话

class Product_detail(View):
    def get(self, request, item_id,):
        item = Item.objects.filter(id=item_id)
        category_list = Categories.objects.all()
        items = Item.objects.order_by('-update_at')
        return render (request, 'product_detail.html',"items" : item, 'category_list': category_list, 'item': items )

    def post(self, request, item_id):
        item = request.POST.get('item')
        size = request.POST.get('Size')
        cart = request.session.get('cart')
        if cart:
            cart[item] = size
        else:
            cart = 
            cart[item] = size
        request.session['cart'] = cart
        print(request.session['cart'])
        return redirect('products:detail', item_id=item_id)

我希望在其中呈现会话的 views.py

class Cart(View):
    def get (self, request): 
        cart = request.session.get('cart', None)
        if not cart:
            cart =  # or however you define your empty cart
        request.session['cart'] = cart
        ids = (list(cart.keys()))
        ids = (list(request.session.get('cart').keys()))
        item = Item.get_items_by_id(ids)
        print(item)
        return render(request, 'cart.html', 'items': item )

我的html代码

 <tbody style="margin-bottom: 20px;">
                              % for item in items %
                              <tr>
                                <th scope="row">forloop.counter</th>
                                <td> <img src="item.first.url"  ></td>
                                <td>item.name</td>
                                  % for key, value in request.session.cart.items %
                                      % if value == value %
                                        <td> value </td> 
                                      % endif %
                                  % endfor %
                                <td>item.price|currency</td>
                                <td> <a href="#">Remove</a> </td>
                              </tr>
                              % endfor %
                            </tbody>

所以我的会话列表中有两个值,一个是 id,另一个是它的大小,所以现在想向用户显示它选择的大小,它同时显示 id 和大小,但我只想呈现用户选择的大小

知道如何实现这一目标

过滤器

@register.filter
def item_size(cart , item):
    return cart[item]

【问题讨论】:

这能回答你的问题吗? Use variable as dictionary key in Django template @bdbd 我试过但没用,它说过滤器无效 你能用你的尝试更新问题吗 更新了问题的样子 应该是 request.session.cart|item_size:item 【参考方案1】:

试试这个:

    <td>item.name</td>
    <td> request.session.cart|item_size:item.id </td> 
    <td>item.price|currency</td>

这将通过使用item 的 id 来获取大小(即字典中的值)。要确保键用作整数,请添加:

item = int(request.POST.get('item'))

【讨论】:

这意味着我必须为其他所有尺寸都这样做 我只想显示那个尺寸而不是所有尺寸 哪个用户选择了添加的屏幕截图,除了大小之外,它的外观如何获取 我要小于size的尺寸 一切顺利!太好了,你不再被困住了【参考方案2】:

因此,对于请求会话值,您不能直接渲染它,您必须创建过滤器或然后渲染它,所以在我的情况下,我想渲染产品大小,这也是它的值,所以在我创建的 templatetag 文件夹中过滤器

用于获取会话值的过滤器

@register.filter(name='cart_size')
def cart_size(item, cart):
    keys = cart.keys()
    for id in keys:
        if int(id) == item.id:
            return cart.get(id)
    return 'Regular';

在我的渲染模板中

item|cart_size:request.session.cart

所以它在问题项 id 中提到的作用是键和大小它的值,我将大小分配给它的项目,所以它在购物车中寻找键的过滤器是什么,你知道键是 id,所以我分配 id等于 item.id 然后它返回分配给 id 的大小,然后在模板中我这样称呼它,因为购物车中的所有值所以我也要求这样做,否则它会抛出错误

【讨论】:

以上是关于如何在模板django中请求会话值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 django 动态访问会话中的值?

如何使用 django 保持 tensorflow 会话在内存中运行

如何在Django的视图功能中访问Django模板中表单中的复选框[关闭]

如何在 django 模板中访问字典值

如何使用 django 在模板中显示默认值?

如何在 django 模板中迭代字典的列表值