【问题标题】:how to request session value in template django如何在模板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}}" alt="" height="100px"></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]

【问题讨论】:

标签: python django django-templates django-class-based-views django-sessions


【解决方案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 的大小,然后在模板中我这样称呼它,因为购物车中的所有值所以我也要求这样做,否则它会抛出错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 2010-10-16
    • 2010-10-16
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多