Ваш new_entry
путь не принимает какие-либо параметры, как из вашего urls.py
. Но вы дали один, в topi c. html:
<a href="{% url 'learning_logs:new_entry' topic.id %}">Add new entry</a>
Здесь topic.id
- это то, что вы дали. Но должно быть:
<a href="{% url 'learning_logs:new_entry' %}">Add new entry</a>
EDIT
Итак, я попытаюсь объяснить. Во-первых, позвольте вам увидеть URL-адрес для new_entry
при регистрации в urls.py.
#Page for adding a new topic
url(r'^new_topic/$',views.new_topic,name='new_topic'),
Здесь вы не указали параметр для пути. Смотрите, первая часть пути. r'^new_topic/$'
. И посмотрите свой URL-адрес, в котором вы указали параметр:
#Page for editing an entry
url(r'^edit_entry/(?P<entry_id>\d+)/$',views.edit_entry,name='edit_entry'),
Теперь давайте посмотрим на первую часть r'^edit_entry/(?P<entry_id>\d+)/$'
, здесь вы можете увидеть параметр, т.е. (?P<entry_id>\d+)
с именем, entry_id . Сравнивая оба URL-адреса, ваши практические URL-адреса будут выглядеть так:
#For adding new topic
www.example.com/new_topic/
#For url with parameter
www.example.com/edit_entry/1/ # 1 is entry_id, parameter for route edit_entry
Теперь , давайте войдем в ваш шаблон:
<a href="{% url 'learning_logs:new_entry' topic.id %}">Add new entry</a>
Смотрите, последняя часть в django тег url, т.е. topic.id
. Поскольку в вашем urls.py вы не указали параметр new_entry . Итак, если вы дадите параметр URL-адресу, который не принимает параметр ( не принимает параметр, я имею в виду, что URL-адрес зарегистрирован, но параметр не установлен для них ), тогда полученный URL-адрес будет показано.
Надеюсь, теперь вы понимаете, о чем я говорю. Для более подробного объяснения того, что делать, вы можете увидеть второй ответ W-liamx . Взгляните на эту прекрасную документацию по URL django.