NoReverseMatch: обратное для 'complete' с аргументами '(1,)' не найдено.1 шаблон (ов) пробовал: ['complete /«] - PullRequest
0 голосов
/ 08 июня 2018

urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
url('', views.index, name= 'index'),
url('add', views.addTodo, name ='add'),
url('complete/<todo_id>', views.completeTodo, name='complete'),
url('deletecomplete', views.deleteCompleted, name='deletecomplete'),
url('deleteall', views.deleteAll, name='deleteall')
]

views.py (часть программы)

def completeTodo(request, todo_id):
todo = Todo.objects.get(pk=todo_id)
todo.complete = True
todo.save()

return redirect('index')

index.html (часть программы) Я полагаю, что это проблема.

 <ul class="list-group t20">
                    {% for todo in todo_list %}
                        {% if todo.complete %}
                        <li class="list-group-item todo-completed">{{ todo.text }}</li>
                        {% else %}
                        <a href="{% url 'complete' todo.id %}"><li class="list-group-item">{{ todo.text }}</li></a>
                        {% endif %}
                    {% endfor %}
                </ul>

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Ну, вы написали путь вроде:

    url('complete/<todo_id>/', views.completeTodo, name='complete'),

Но здесь <todo_id> является частью url , он не обозначает переменную и т. Д.Это означает, что есть только один URL, который будет соответствовать: /complete/<todo_id>.

Если вы используете , вы, вероятно, захотите использовать path(..) вместо:

    <b>path</b>('complete/<todo_id>', views.completeTodo, name='complete'),

Кроме того, если todo_id обычно является целым числом, рекомендуется указать тип:

    path('complete/<<b>int:</b>todo_id>', views.completeTodo, name='complete'),

Для , вы не можете использовать такие path(..) s, и в этом случае вам нужно написать регулярное выражение , например:

    <b>url</b>(<b>r</b>'<b>^</b>complete/<b>(?P</b><todo_id><b>[0-9]+)</b><b>$</b>', views.completeTodo, name='complete'),
0 голосов
/ 08 июня 2018

Ваше выражение регулярного выражения неверно:

Вместо этого:

url('complete/<todo_id>', views.completeTodo, name='complete'),

попробуйте это:

url(r'^complete/(?P<todo_id>\d+)$', views.completeTodo, name='complete'),

Или, если вы хотите использовать path

path('complete/<int:todo_id>', views.completeTodo, name='complete'),

РЕДАКТИРОВАТЬ

Поскольку вы используете Django 1. *, вы не можете использовать path() Правильный способнастроить все ваши URL-адреса с помощью url регулярных выражений

Примечание

'^': совпадение должно начинаться с начала строки или строки.

'$': совпадение должно происходить в конце строки

'\ d +': совпадение всех цифр

r в начале обозначаетregex

url(r'^$', views.index, name= 'index'),
url(r'^add$', views.addTodo, name ='add'),
url(r'^complete/(?P<todo_id>\d+)$', views.completeTodo, name='complete'),
url(r'^deletecomplete$', views.deleteCompleted, name='deletecomplete'),
url(r'^deleteall$', views.deleteAll, name='deleteall')
...