Ошибка Python/Django "страница не найдена": "Текущий путь, ... не совпадает ни с одним из этих путей".
Я изучаю главу 18 в Python Crash Course Эрика Маттеса. Я использую Django 4.0.1, а в книге используется 2.2.0, поэтому я вижу, что у других людей возникают такие же проблемы, как и у меня, с этим разделом.
В других подобных вопросах на stackoverflow по этой проблеме предлагаемые решения с использованием url вместо path также кажутся устаревшими. Поэтому решения на сайте, к сожалению, мне не помогли.
Проблема: когда я открываю http://localhost:8000/ и нажимаю на "темы", я получаю ошибку 404 not found следующим образом:
Page not found (404)
Request Method: GET
Request URL: http://localhost:8000/(%25%20url%20'learning_logs:topics'%20%25%7D
Using the URLconf defined in learning_log.urls, Django tried these URL patterns, in this order:
admin/
[name='index']
topics/ [name='topics']
The current path, (% url 'learning_logs:topics' %}, didn’t match any of these.
Однако при ручном переходе по адресу http://localhost:8000/topics страница отображается как положено. Я считаю, что это проблема из-за моего urls.py, расположенного в папке app.
Вот мой urls.py в learning_logs (app), где, как я думаю, кроется проблема:
from django.urls import path
from . import views
app_name = 'learning_logs'
urlpatterns = [
#Home page
path('', views.index, name='index'),
#Page that shows all topics.
path('topics/', views.topics, name='topics'),
]
Вот мой urls.py в learning_log (основной проект):
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('learning_logs.urls')),
]
views.py
from django.shortcuts import render
from .models import Topic
# Create your views here.
def index(request):
"""The home page for Learning Log."""
return render(request, 'learning_logs/index.html')
def topics(request):
"""Show all topics."""
topics = Topic.objects.order_by('date_added')
context = {'topics': topics}
return render(request, 'learning_logs/topics.html', context)
base.html найден в папке template/learning_logs:
<p>
<a href="{% url 'learning_logs:index' %}" >Learning Log</a> -
<a href="(% url 'learning_logs:topics' %}" >Topics</a>
</p>
{% block content %} {% endblock content %}
topics.html
{% extends "learning_logs/base.html" %}
{% block content %}
<p> Topics </p>
<ul>
{% for topic in topics %}
<li> {{topic}}</li>
{% empty %}
<li> No topics have been added yet.</li>
{% endfor %}
</ul>
{% endblock content %}
и, наконец, index.html:
{% extends "learning_logs/base.html" %}
{% block content %}
<p>Learning Log helps you keep track of your learning, for any topic you're
learning about.</p>
{% endblock content %}
Заранее благодарю вас за помощь.
Комментарий под моим вопросом Виллема Ван Онсема ответил на мой вопрос, оказалось, что это была опечатка.
Темы не начали шаблон url tagb с {%... - Виллем Ван Онсем