Проблема с отображением урлов на функции представления в Django

Я хочу сгруппировать все мои URL в моем приложении todo list в файл project/todolist/urls.py. Таким образом, у меня есть кнопка и поле String, где вы можете добавить элемент в список, и когда вы нажимаете на кнопку, она должна отправить строку в модель данных и перенаправить обратно на домашнюю страницу с обновленным списком. Это работает, когда я разместил все урлы в файле project/urls.py, как показано ниже:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url('todo_list/', include('todolist.urls')),
    url('addItem/', addItem),
    url('deleteItem/(?P<i>[0-9]+)', deleteItem)
    ]

Но я хотел использовать функцию include() вместо этого и сгруппировать все представления add, delete и todo_list в один файл в project/todolist/urls.py. Но когда я делаю это, я получаю ошибки Page not found и такие:

Using the URLconf defined in test_django.urls, Django tried these URL patterns, in this order:

    ^admin/
    todo_list/

The current path, addItem/, didn’t match any of these.

Ниже приведен код, который выдает ошибку. Я пытался изменить в html-шаблоне, чтобы действие формы переходило в /todo_list/addItem/ вместо /addItem/, но это почему-то не решает проблему.

*** project/todolist/urls.py ***

from django.urls import path

from . import views

urlpatterns = [
    path('', views.get_todo),
    path('addItem/', views.addItem),
    path('deleteItem/(^?P<i>[0-9]+$)', views.deleteItem)
    ]

*** project/urls.py ***

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url('todo_list/', include('todolist.urls')),
    ]

*** project/todolist/views.py ***

def get_todo(request):
    """Function performed when we open the homepage"""
    # our model allows us to get items from the DB into the view
    
    # get all current items from the DB
    all_todo_items = TodoListItem.objects.all()
    logging.debug(all_todo_items)
    # create empty form where new items can be added
    form = TodoForm()
    
    # we always want to display the empty form and the list of todo items
    todo = {'todo': all_todo_items,
            'form': form
            }
    
    return render(request, "todo.html", todo)

@csrf_exempt
def addItem(request):
    """Function performed when we click the submit button"""
    logging.debug(print(request.POST))
    form = TodoForm(request.POST)
    if form.is_valid():
        
        new_item = TodoListItem()
        
        new_item.content = form.cleaned_data['todo']
        new_item.save()
    
    return HttpResponseRedirect('/todo_list/') 

def deleteItem(request, i):
    """Function when we click delete button"""
    #item = get_object_or_404(TodoListItem, pk=i)
    item = TodoListItem.objects.get(id = i)
    item.delete()
    
    return HttpResponseRedirect('/todo_list/') 

<><>*** project/todolist/templates/todo.html ***

<>
<h1> ToDo List </h1>


    <form action="/todo_list/addItem/" method="post">{% csrf_token %}
      <div>
        {{ form }}
        <input type="submit" value="Add Todo Item">
      </div>
      
    </form>


    <p> 
        Current List:
        
             <ul>
                 {% for item in todo %}
                   <li> {{ item }} </li>
                   <form action="/todo_list/deleteItem/{{item.id}}" method = "post">
                       {% csrf_token %}
                       <input type="submit" value="Delete">
                   </form>  
                {% endfor %}
            </ul> 
    </p>

У меня есть похожая функциональность, которую я недавно создал, и я думаю, что в вашем шаблоне вы должны использовать следующее:

<form action="{% url ‘deleteItem’ item.id %}" method = "POST">

Для использования include вам понадобится вот это, я думаю:

urlpatterns = patterns('',
                   url(r'^some_base_url/', include('your_app.urls')),
                   )

Найдено здесь Добавление URL из приложения Django

Я думаю, что документация django объясняет это довольно хорошо, если вы хотите взглянуть

https://docs.djangoproject.com/en/dev/topics/http/urls/#including-other-urlconfs

Вернуться на верх