Django:找不到反向网址格式

时间:2019-03-06 21:03:53

标签: django django-templates django-views python-regex

我正在尝试使regex(Django URL)与queryset一起使用。我用模板URL尝试了不同的模式,但是没有用。

通用ListView:

class ProductListView(ListView):
    template_name = "main/product_list.html"
    paginate_by = 4

    def get_queryset(self):
        tag = self.kwargs["tag"]
        self.tag = None

        if tag != "all":
            self.tag = get_object_or_404(
                models.ProductTag, slug=tag
            )

        if self.tag:
            products = models.Product.objects.active().filter(
                tags=self.tag
            )
        else:
            products = models.Product.objects.active()

        return products.order_by("name")

我的网址:

path("products/<slug:tag>/", views.ProductListView.as_view(), name='products'),

模板:

我无法像下面这样在tempalte中工作。我尝试传递不同的关键字参数,但是它不起作用:

<li class="nav-item">
    <a class="nav-link" href="{% url 'products' %}">Products</a>
</li>

错误:

Reverse for 'products' with arguments '('',)' not found. 1 pattern(s) tried: ['products\\/(?P<tag>[-a-zA-Z0-9_]+)\\/$']

2 个答案:

答案 0 :(得分:0)

您的products路由期望一个自变量。所以你必须给它一个。

必须是类似

<li class="nav-item">
    <a class="nav-link" href="{% url 'products' 'my-nice-slug' %}">Products</a>
</li>

在这种情况下,my-nice-slug当然应该是一些现有的子弹。

答案 1 :(得分:0)

上一个答案是正确的,您想要的确切网址就是-

{% url 'products' product.slug %}

如果product在其模型中具有一个{slug或--

slug

如果{% url 'products' product.tag %} 在其模型中具有一个包含该子弹的product字段。