【发布时间】:2021-06-01 06:03:36
【问题描述】:
我正在使用 Django 创建一个小型投票应用程序,并且主页上有一个按钮,允许用户创建新投票和另一个允许他们删除投票的按钮。
我的删除路线应该将用户发送到位于 /polls/:id/delete 的确认页面。当我在 URL 中键入它时,它可以工作,但是当我尝试通过按钮单击访问确认页面时,它会将我发送到错误的 URL。
我已尝试更改 deletePoll 类和 Path 中的信息,但均无效。 知道我做错了什么吗?
#this is my form on the page:
<form action="{% url 'polls:delete' pk=question.id %}"method="GET">
{% csrf_token %}
<input class="btn btn-default btn-danger" type="submit"value="Delete"/>
</form>
#this is my class inside of views.py
class PollDelete(DeleteView):
template_name = 'polls/delete.html'
# can specify success url
# url to redirect after sucessfully
# deleting object
def get_object(request):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/delete.html')
#this is my polls/urls.py
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
# ex: /polls/
path('', views.IndexView.as_view(), name='index'),
# ex: /polls/5/
path('<int:pk>/', views.DetailView.as_view(), name='detail'),
# ex: /polls/5/results/
path('<int:pk>/results/', views.ResultsView.as_view(), name='results'),
# ex: /polls/5/vote/
path('<int:question_id>/vote/', views.vote, name='vote'),
#path for delete
#Tried changing the format to /polls/delete/PK but it didn't work
path('<int:pk>/delete/', views.PollDelete.as_view(), name='delete'),
# path('createpoll/', views.createPoll, name='createPoll')
]
【问题讨论】:
-
“将我发送到错误的 URL”请指定它会将您带到哪个 url。从您的代码来看,一切都很好。
-
当我点击按钮时,它当前将我发送到“127.0.0.1:8000/polls/delete.html”而不是127.0.0.1:8000/polls/1/delete 早些时候它发送我到127.0.0.1:8000/polls/delete/polls。我认为我对 Django 路由的理解有点缺陷,但这就是正在发生的事情
-
你为什么在你的
get_object方法中写return render(request, 'polls/delete.html')?get_object应该返回要删除的对象。所以你应该写return question。还有变量question_id在那个方法中是从哪里来的?? -
这是我第一次使用 Django,所以删除视图是根据在线教程创建的。 question_id 来自在此视图中导入的 Question 模型。
-
你说 question_id 来自
Question模型。但是导入模型是否意味着您会自动在文件中获得这样的变量?您是否正在创建一个全局变量question_id? (我建议你不要在 Django 中使用全局变量)你很可能想要来自 kwargs 的 id,所以你应该写question = get_object_or_404(Question, pk=self.kwargs['pk'])。事实上,这让我注意到你写的是get_object(request),但实际上应该是get_object(self)
标签: html python-3.x django sqlite