Представление Django не распознает имя параметра из шаблона

Я пытаюсь передать два параметра из шаблона ("zn" и "ru") для фильтрации постов в просмотре. Мне кажется, что переменные обоих параметров в порядке, но не под правильным именем. Вероятно, представление не распознает, кто из них кто. Фильтрация с параметром "zn" работает, а фильтрация с параметром "ru" - нет (см. сообщение об ошибке на картинке). введите описание изображения здесь

urls.py:

from django.urls import path
from . import views

urlpatterns = [
    ...
    path("clanky/", views.clanek_vyber, name="clanky_vyber", kwargs={'zn': '', 'ru': ''}),
    path("clanky/<slug:zn>/", views.clanek_vyber, name="clanky_vyber", kwargs={'ru': ''}),
    path("clanky/<slug:ru>/", views.clanek_vyber, name="clanky_vyber", kwargs={'zn': ''}),
    path("clanky/<slug:zn>/<slug:ru>/", views.clanek_vyber, name="clanky_vyber"),

views.py:

html, single post:

    <div class="odkazy_pod_clanky">
      <small>
        Značka:
          {% for z in clanek.znacka.all %}
            <a href="{% url 'clanky_vyber' zn=z.slug ru='' %}">{{ z }}, </a>
          {% endfor %}

        Rubrika: <a href="{% url 'clanky_vyber' zn='' ru=clanek.rubrika.slug %}">{{ clanek.rubrika }}</a>

              <!-- Zařazení: {{ clanek.urceni.all|join:", "}} -->
      </small> <br>
    </div>

html, выпадающие окна (javascript) на странице со списком постов:

        <div class="rozbalovaci_znacka">
          <button onclick="rozbal_znacka()" class="menu_znacka">značka: {{ zna }}</button>
          <div id="rozbalovacka_znacka" class="polozky_k_rozbaleni_znacka">
            <a href="{% url 'clanky_vyber' zn="" %}">jakákoliv</a>
            {% for za in znac %}
              <a href="{% url 'clanky_vyber' zn=za.slug %}">{{ za.nazev_znacky }}</a>
            {% endfor %}
          </div>
        </div>

      <!-- třídění dle rubriky-->
      <div class="rozbalovaci_rubrika">
        <button onclick="rozbal_rubrika()" class="menu_rubrika">rubrika: {{ rub }}</button>
        <div id="rozbalovacka_rubrika" class="polozky_k_rozbaleni_rubrika">
          <a href="{% url 'clanky_vyber' ru="" %}">jakákoliv</a>
          {% for rb in rubr %}
            <a href="{% url 'clanky_vyber' ru=rb.rubrika.slug %}">{{ rb.rubrika }}</a>
          {% endfor %}
        </div>
      </div>

Я также пробовал фильтровать сообщения с помощью django-filters и это сработало, но я бы предпочел решение выше. Я уже давно в этом разбираюсь и не смог найти правильного решения в существующих вопросах на этом сайте. Спасибо, Павел

Пути полностью пересекаются. Действительно:

path("clanky/<slug:zn>/", views.clanek_vyber, name="clanky_vyber", kwargs={'ru': ''}),
path("clanky/<slug:ru>/", views.clanek_vyber, name="clanky_vyber", kwargs={'zn': ''}),

если путь clanky/foo, то оба пути совпадают. Таким образом, он будет проверять пути в определенном порядке и всегда выбирать первый, поэтому при zn в качестве значения и ru пустой.

Таким образом, вы должны убедиться, что пути не пересекаются. Возможно, лучше, чтобы они не перекрывались полностью:

urlpatterns = [
    path(
        'clanky/zn/<slug:zn>/',
        views.clanek_vyber,
        name='clanky_vyber',
        kwargs={'ru': ''},
    ),
    path(
        'clanky/ru/<slug:ru>/',
        views.clanek_vyber,
        name='clanky_vyber',
        kwargs={'zn': ''},
    ),
    path(
        'clanky/znru/<slug:zn>/<slug:ru>/',
        views.clanek_vyber,
        name='clanky_vyber',
    ),
]
Вернуться на верх