Python + Django URL & 尝试 POST to_do 项目时查看错误
Python + Django URL & View errors when attempting to POST to_do item
这是我第一次尝试使用 Django,我 运行 遇到了 URL & Views 文件的问题。我创建了一个名为“阅读”的项目。在那个项目中,我创建了两个应用程序,“产品”和“语音”。在“语音”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/ 与其中任何一个都不匹配。
当我在 /addTodo 操作前添加“语音”时,为什么会复制路径?
不确定这是否与错误有关,但在我实施项目级“模板”目录之前,我为每个应用程序提供了自己的“模板”目录。在这些目录中,我创建了一个包含单独内容的“index.html”文件。当我有每个应用程序的索引路径时,我无法让应用程序呈现与其关联的“index.html”文件。相反,似乎第二个应用程序试图呈现第一个应用程序的“index.html”文件。 Django 中的模板是否有自上而下的规则?
你错过了一个斜杠
试试这个:
<form action="/speech/addTodo/" method="POST">{% csrf_token %}
更 'Django' 的方法可以是:
from django.urls import path
from speech.views import todoView, addTodo
urlpatterns = [
path('todo/', todoView),
path('addTodo/', addTodo, name='add-todo')
]
然后在模板中:
<form action="{% url 'add-todo' %}" method="POST">{% csrf_token %}
这是我第一次尝试使用 Django,我 运行 遇到了 URL & Views 文件的问题。我创建了一个名为“阅读”的项目。在那个项目中,我创建了两个应用程序,“产品”和“语音”。在“语音”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/ 与其中任何一个都不匹配。
当我在 /addTodo 操作前添加“语音”时,为什么会复制路径?
不确定这是否与错误有关,但在我实施项目级“模板”目录之前,我为每个应用程序提供了自己的“模板”目录。在这些目录中,我创建了一个包含单独内容的“index.html”文件。当我有每个应用程序的索引路径时,我无法让应用程序呈现与其关联的“index.html”文件。相反,似乎第二个应用程序试图呈现第一个应用程序的“index.html”文件。 Django 中的模板是否有自上而下的规则?
你错过了一个斜杠
试试这个:
<form action="/speech/addTodo/" method="POST">{% csrf_token %}
更 'Django' 的方法可以是:
from django.urls import path
from speech.views import todoView, addTodo
urlpatterns = [
path('todo/', todoView),
path('addTodo/', addTodo, name='add-todo')
]
然后在模板中:
<form action="{% url 'add-todo' %}" method="POST">{% csrf_token %}