【问题标题】:Django routing sending me to the wrong URLDjango 路由将我发送到错误的 URL
【发布时间】: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


【解决方案1】:
path('delete/<int:pk>', views.PollDelete.as_view(), name='delete')

将此代码粘贴到您的 urls.py。您的 html 中的操作识别了 delete/pk,您将 pk/delete/ 扔到您的 url 中,但它没有返回正确的 url。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2020-12-30
    相关资源
    最近更新 更多