Django: Обратные шаблоны URL не найдены - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь заставить регулярное выражение (Django URL) работать с набором запросов. Я пробовал разные шаблоны с 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")

Мой URL:

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

Шаблон:

Я не мог заставить его работать в темпале, как показано ниже. Я пытался передать разные аргументы ключевых слов, но это не работает:

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

Error

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

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Предыдущий ответ правильный, точный URL, который вы хотите, просто -

{% url 'products' product.slug %}

, если product имеет в своей модели поле slug, которое содержит слаг или -

{% url 'products' product.tag %}

, если product имеет в своей модели поле tag, содержащее слаг.

0 голосов
/ 07 марта 2019

Ваш маршрут products ожидает аргумент slug. Таким образом, вы должны дать ему один.

Это должно быть что-то вроде

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

В этом случае my-nice-slug, конечно, должно быть существующим слагом.

...