Веб-сайт создает новую несуществующую веб-страницу после посещения сайта/class_id

Мой сайт создает новый несуществующий сайт, после того как я посещаю свой сайт/näytä_luokka/# (также, class_id). Если я пытаюсь перейти на страницу, которая находится в том же файле urls.py, я получаю ошибку, потому что он пытается найти страницу website/näytä_luokka/luokat вместо того, чтобы перейти на website/luokat. Это происходит через navbar. Если я пытаюсь перейти по ссылке, которая находится в другом urls.py, все работает нормально. Переход из /luokat на другие страницы также работает нормально.

Я использую django для создания веб-сайта.

Вот несколько примеров из моего

urls.py

from django.urls import path from . import views

urlpatterns = [

path('show_category/<category_id>', views.show_category, name="show-category"),

path('categories', views.all_categories, name="categories"),' ]

и .views

def näytä_luokka(request, luokka_id):
    luokkalistaus = luokka.objects.get(pk=luokka_id)
    return render(request, 'tietokanta/näytä_luokat.html', 
        {'luokkalistaus': luokkalistaus})
def kaikki_luokat(request):
    luokkalista = luokka.objects.all().order_by('nimi')
    return render(request, 'tietokanta/luokat.html', 
        {'luokkalista': luokkalista})

** навигационная панель.**

     
            </li>
      <li class="nav-item">
        <a class="nav-link" href="luokat">Luokat</a>
      </li>

Я пробовал добавить / после номера id, но id ничего не дал.

Спасибо, если вы можете помочь мне разобраться в этом.

Путь в вашем urls.py
. path('näytä_luokka/<luokka_id>', views.näytä_luokka, name="näytä-luokka"),

Конкретно, <luokka_id> - это то, что создает для вас веб-страницу. Именно это и должно произойти в таком пути. Это красота того, что может делать Django; создавать урлы динамически, в данном случае страницу, которая следует шаблону, но является уникальной для luokka_id.

Ошибка, которую вы получаете при попытке website/näytä_luokka/luokat, происходит потому, что ваше представление def näytä_luokka(request, luokka_id): ищет, как я полагаю, число (int) для luokka_id, но вместо этого вы передаете ему строку 'luokat', потому что это часть url после website/näytä_luokka/.

Теперь, в вашем шаблоне вы неправильно ссылаетесь на href. Должно быть так:

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

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

Есть две ошибки.

  1. По умолчанию <luokka_id> url param считается типом str, т.е. <str:luokka_id> и <luokka_id> одинаковы. Поэтому он должен быть <int:luokka_id>.

urls.py:

urlpatterns = [
    path('näytä_luokka/<int:luokka_id>/', views.näytä_luokka, name="näytä-luokka"),
    path('luokat/', views.kaikki_luokat, name="luokat"),
]
  1. Вы должны url tags правильно, поэтому в шаблоне это должно быть:
<li class="nav-item">
    <a class="nav-link" href="{% url 'luokat' %}">Luokat</a>
</li>

Примечание: Всегда давайте / в конце каждого маршрута.

Вернуться на верх