TypeError show_poll() 得到了一个意外的关键字参数 's'
TypeError show_poll() got an unexpected keyword argument 's'
我试图在向投票列表提交表单后重定向用户。提交后表单保存在管理员中,但重定向失败任何人都可以帮助我吗?
我的views.py:
def show_poll(request, id):
p = Poll.objects.get(id=id)
pops = p.option_set.all()
context = {
'poll': p,
'options': pops,
}
return render(request, "show_poll.html", context)
def create_poll(request):
c_form = PollForm(request.POST or None)
data = {}
data["create_form"] = c_form
if c_form.is_valid():
poll = c_form.save(commit=False)
poll.slug = slugify(poll.title)
poll.save()
return redirect("show_poll", s=poll.slug)
return render(request, "create_poll.html", context=data)
我的urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('show/poll/<int:id>/', views.show_poll, name="show_polls"),
path('c_poll/<slug:s>/',views.show_poll, name="show_poll"),
path('create/poll/',views.create_poll)
]
您有两条路径引用 相同 视图,确实:
path('show/poll/<b><int:id></b>/', views.<b>show_poll</b>, name='show_polls'),
path('c_poll/<b><slug:s></b>/',views.<b>show_poll</b>, name='show_poll'),
这意味着 show_poll
可以被第一个或第二个模式调用。如果是第一个,它将用 id
调用它,而不用 s
.
如果第二个模式“触发”,那么它会用 s=…
和 …
子弹来计算 show_poll
。
您或许可以将两者结合起来并使用:
from django.shortcuts import get_object_or_404
def show_poll(request, <b>id=None, s=None</b>):
qs = Poll.objects.all()
if <b>id is not None</b>:
qs = qs.filter(<b>pk=id</b>)
if <b>s is not None</b>:
qs = qs.filter(<b>slug=s</b>)
p = get_object_or_404(qs)
pops = p.option_set.all()
context = {
'poll': p,
'options': pops,
}
return render(request, "show_poll.html", context)
另一种选择是制作两个单独的视图,一个用于第一个模式,一个用于另一个模式。
我试图在向投票列表提交表单后重定向用户。提交后表单保存在管理员中,但重定向失败任何人都可以帮助我吗?
我的views.py:
def show_poll(request, id):
p = Poll.objects.get(id=id)
pops = p.option_set.all()
context = {
'poll': p,
'options': pops,
}
return render(request, "show_poll.html", context)
def create_poll(request):
c_form = PollForm(request.POST or None)
data = {}
data["create_form"] = c_form
if c_form.is_valid():
poll = c_form.save(commit=False)
poll.slug = slugify(poll.title)
poll.save()
return redirect("show_poll", s=poll.slug)
return render(request, "create_poll.html", context=data)
我的urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('show/poll/<int:id>/', views.show_poll, name="show_polls"),
path('c_poll/<slug:s>/',views.show_poll, name="show_poll"),
path('create/poll/',views.create_poll)
]
您有两条路径引用 相同 视图,确实:
path('show/poll/<b><int:id></b>/', views.<b>show_poll</b>, name='show_polls'),
path('c_poll/<b><slug:s></b>/',views.<b>show_poll</b>, name='show_poll'),
这意味着 show_poll
可以被第一个或第二个模式调用。如果是第一个,它将用 id
调用它,而不用 s
.
如果第二个模式“触发”,那么它会用 s=…
和 …
子弹来计算 show_poll
。
您或许可以将两者结合起来并使用:
from django.shortcuts import get_object_or_404
def show_poll(request, <b>id=None, s=None</b>):
qs = Poll.objects.all()
if <b>id is not None</b>:
qs = qs.filter(<b>pk=id</b>)
if <b>s is not None</b>:
qs = qs.filter(<b>slug=s</b>)
p = get_object_or_404(qs)
pops = p.option_set.all()
context = {
'poll': p,
'options': pops,
}
return render(request, "show_poll.html", context)
另一种选择是制作两个单独的视图,一个用于第一个模式,一个用于另一个模式。