Веб-сайт создает новую несуществующую веб-страницу после посещения сайта/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>
Мне нужно увидеть больше вашего кода и, возможно, лучше понять, что вы хотите, чтобы ваша страница делала, чтобы помочь дальше, но я надеюсь, что это поможет.
Есть две ошибки.
- По умолчанию
<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"),
]
- Вы должны
url tags
правильно, поэтому в шаблоне это должно быть:
<li class="nav-item">
<a class="nav-link" href="{% url 'luokat' %}">Luokat</a>
</li>
Примечание: Всегда давайте
/
в конце каждого маршрута.