Я получаю ошибку NoReverseMatch, кто-нибудь знает, что я делаю не так?
Я пытаюсь разрешить пользователю редактировать существующую запись. Но когда я включаю
new_entry.html
`{% extends "learning_logs/base.html" %}
{% block content %}
<p> <a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a></p>
<p>Add a new entry:</p>
<form action="{% url 'learning_logs:new_entry' topic.id %}" method='post'>
{% csrf_token %}
{{form.as_div}}
<button name='submit'>Add entry</button>
</form>
{% endblock content %}`
Сайт выбрасывает NoReverseMatch в /topics/1/ Не слишком уверен, с чего начать поиск решения этой проблемы. Все еще достаточно новичок в django.
Остальная часть моего кода ниже
views.py
def new_entry(request, topic_id):
"""Add a new entry for a particular topic."""
topic = Topic.objects.get(id=topic_id)
if request.method !='POST':
#No data submitted; reate a blank form
form = Entry()
else:
#POST data submitted; process data
form =EntryForm(data=request.POST)
if form.is_valid():
new_entry = form.save(commit=False)
new_entry.topic = topic
new_entry.save()
return redirect('learning_logs:topic', topic_id=topic_id)
#Display a blank or invalid form
context = {'topic': topic, 'form': form}
return render(request, 'learning_logs/new_entry.html', context)
urls.py
app_name = 'learning_logs'
urlpatterns = [
#Home page
path('', views.index, name='index'),
#Page that shows all topics.
path('topics/', views.topics, name='topics'),
#Detail page for a single topic
path('topics/<int:topic_id>/', views.topic, name='topic'),
#Page for adding a new topic
path('new_topic/', views.new_topic, name='new_topic'),
#Page for adding a new entry
path('new_entry/<int:topic_id>/', views.new_entry, name='entry'),
]
Ошибка связана с тем, что в вашем приложении learning_logs нет url, который name='new_entry'.
{% url 'learning_logs:new_entry' topic.id %}
вы указали, что имя в urls.py имеет name='entry', поэтому его нужно изменить на.
{% url 'learning_logs:entry' topic.id %}
В вашем списке urlpatterns
параметр имени для new_entry
имеет вид entry
:
path('new_entry/<int:topic_id>/', views.new_entry, name='entry'),
]
Но вы пытаетесь получить доступ к нему как new_entry
в вашем new_entry.html
:
<form action="{% url 'learning_logs:new_entry' topic.id %}" method='post'>
Я предполагаю, что вы хотели использовать new_entry
в качестве параметра name в URLConf. Таким образом, чтобы исправить ошибку, используйте следующее:
path('new_entry/<int:topic_id>/', views.new_entry, name='new_entry'),
]