Это моя первая попытка использовать Django, и я столкнулся с проблемой с файлами URL и просмотров. Я создал проект под названием «чтение». В рамках этого проекта я создал два приложения: «продукты» и «речь». В файле urls.py «речи» у меня есть следующий код:
from django.urls import path
from speech.views import todoView, addTodo
urlpatterns = [
path('todo/', todoView),
path('addTodo/', addTodo)
]
В файле views.py у меня есть следующий код:
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from .models import TodoItem
def todoView(request):
all_todo_items = TodoItem.objects.all()
return render(request, 'todo.html',
{'all_items': all_todo_items})
def addTodo(request):
new_item = TodoItem(content = request.POST['content'])
new_item.save()
return HttpResponseRedirect('/todo/')
В папке проекта в файле urls.py у меня есть:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('products/', include('products.urls')),
path('speech/', include('speech.urls'))
В папке проекта, в каталоге «templates», у меня есть файл «todo. html» с:
<h1>This is the todo page</h1>
<ul>
{% for todo_item in all_items %}
<li>{{ todo_item.content}}</li>
{% endfor %}
</ul>
<form action="/addTodo/" method="POST">{% csrf_token %}
<input type="text" name="content" />
<input type="submit" value="Add" />
</form>
Когда я пытаюсь добавить элемент в модель задачи, я получаю сообщение об ошибке «Текущий путь addTodo / не соответствует ни одному из них». Я попытался добавить слово «речь» к форме, например:
<form action="speech/addTodo/" method="POST">{% csrf_token %}
, однако теперь я получаю эту ошибку:
Текущий путь, Speech / todo / Speech / addTodo /, didn ' t соответствует любому из них.
Почему он дублирует путь, когда я добавляю слово «речь» к действию / addTodo?
Не уверен, связано ли это с ошибкой, но до того, как я реализовал каталог «шаблонов» уровня проекта, я дал каждому приложению свой собственный каталог «шаблонов». В этих каталогах я создал файл index. html с отдельным содержимым. Когда у меня был путь к индексу для каждого приложения, я не мог заставить приложения отображать связанный с ним файл index. html. Вместо этого казалось, что второе приложение пытается отобразить файл index. html первого приложения. Есть ли правило «сверху вниз», когда дело касается шаблонов в Django?