如何在http栏中显示类别?

时间:2019-07-25 12:37:55

标签: django

在电子商务商店工作。我创建了分类功能,可以显示具有特定类别的项目。

一切正常,但我也想在/category/之后显示类别名称。

我尝试了GET方法,但出现错误。你有空吗?按钮中的值为类别。

模板中的表单

<form method='post' action='/category/' class="form-inline">
        {% csrf_token %}
    </li>
    <li class="nav-item">
        <button class="nav-link purple darken-4" type="submit" name="S" value="S" style="background-color: grey;">Shirts</button>
    </li>
    <li class="nav-item">
        <button class="nav-link purple darken-4" type="submit" name="S" value="O" style="background-color: grey;">Outwear</button>
    </li>
    <li class="nav-item">
        <button class="nav-link purple darken-4" type="submit" name="S" value="SW" style="background-color: grey;">Sportwear</button>
    </li>
</form>

观看次数:

def category(request):
    if request.method=="POST":
        if request.POST.get('S', False):
            s = request.POST['S']
            objects_display = Item.objects.filter(category=s)

            if objects_display.exists():
                context ={
                    "objects": objects_display
                }

                return render(request, "shop/categories.html", context)
            else:
                messages.warning(request, 'no items found')
                return redirect('item-list')

URL:

path('category/', category, name='category'),

2 个答案:

答案 0 :(得分:0)

您应该使用“ a”代替表格 模板

<li class="nav-item">
   <a class="nav-link purple darken-4" href="{% url 'category' category_name='s' %} style="background-color: grey;">Shirts</a>
 </li> (and others)

url

url(r'^category/(?P<category_name>\w+)/$', views.category, name="category"),

观看次数

def category(request, category_name):
    objects_display = Item.objects.filter(category=category_name)

    if objects_display.exists():
        context ={
            "objects": objects_display
        }

        return render(request, "shop/categories.html", context)
    else:
         messages.warning(request, 'no items found')
         return redirect('item-list')

答案 1 :(得分:0)

使用动态URL,您可以轻松,在URL中传递category_name参数并在视图中进行访问,并基于参数值进行查询(如果该参数不存在,则可以提供所有项目,也可以将消息显示为空

url

path('category/', category, name='category'),
re_path('category/(?P<category_name>[0-9,a-z,A-Z]+)', category, name='category'),

观看次数

def category(request, category_name=None):
    if category_name:
        objects_display = Item.objects.filter(category=category_name) 
    else:
        objects_display = Item.objects.all()

    context ={
        "objects": objects_display
    }

    return render(request, "shop/categories.html", context)

您也可以动态执行类别,您可以创建类别模型,并在每次可以在上下文中传递所有类别对象并在类别对象上编写for循环时在视图中添加forainkey,而在内部循环中可以编写HTML li标签,因此它将完全动态化

HTML

<li class="nav-item">
   <a class="nav-link purple darken-4" href="{% url 'category' category_name='category name' %} style="background-color: grey;">Shirts</a>
 </li>