对 'edit_order' 进行反转,未找到参数“(17,)”。尝试了 1 种模式:['order/<int:pk>/$']
Reverse for 'edit_order' with arguments '(17,)' not found. 1 pattern(s) tried: ['order/<int:pk>/$']
我竭尽全力解决这个错误,但我无法解决这个错误。
给出了错误的详细信息:
NoReverseMatch 在 /order/
'edit_order' 的反转,未找到参数“(17,)”。尝试了 1 种模式:['order/int:pk/$']
请求方式:POST
请求 URL:http://127.0.0.1:8000/order/
Django 版本:1.11.29
异常类型:NoReverseMatch
异常值:
'edit_order' 的反转,未找到参数“(17,)”。尝试了 1 种模式:['order/int:pk/$']
异常位置:C:\Python27\lib\site-packages\django\urls\resolvers.py in _reverse_with_prefix, line 497
Python 可执行文件:C:\Python27\python.exe
Python版本:2.7.16
Python路径:
['C:\Users\dipesh\Desktop\nandiasgraden-project\nandiasgarden',
'C:\WINDOWS\SYSTEM32\python27.zip',
'C:\Python27\DLLs',
'C:\Python27\lib',
'C:\Python27\lib\plat-win',
'C:\Python27\lib\lib-tk',
'C:\Python27',
'C:\Python27\lib\site-packages']
服务器时间:2020 年 7 月 8 日,星期三 12:02:12 +0000
Url.py
来自 django.contrib 导入管理员
从 django.conf.urls 导入 url
来自披萨导入视图
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.home, name='home'),
url(r'^order/', views.order, name='order'),
url(r'^pizzas/', views.pizzas, name='pizzas'),
url(r'^order/<int:pk>/$', views.edit_order, name='edit_order'),
]
View.py
from django.shortcuts import render
from .forms import PizzaForm, MultiplePizzaForm
from django.forms import formset_factory
from .models import Pizza
def home(request):
return render(request, 'pizza/home.html')
def order(request):
multiple_form = MultiplePizzaForm()
if request.method == 'POST':
filled_form = PizzaForm(request.POST)
if filled_form.is_valid():
created_pizza = filled_form.save()
created_pizza_pk = created_pizza.id
note = 'Thanks for ordering! Your %s %s and %s pizza is on its way!'
%(filled_form.cleaned_data['size'],
filled_form.cleaned_data['topping1'],
filled_form.cleaned_data['topping2'],)
new_form = PizzaForm()
return render(request, 'pizza/order.html', {'created_pizza_pk':created_pizza_pk,
'pizzaform':new_form, 'note':note, 'multiple_form':multiple_form, })
else:
form = PizzaForm()
return render(request, 'pizza/order.html', {'multiple_form':multiple_form,
'pizzaform':form})
def pizzas(request):
number_of_pizzas = 2
filled_multiple_pizza_form = MultiplePizzaForm(request.GET)
if filled_multiple_pizza_form.is_valid():
number_of_pizzas = filled_multiple_pizza_form.cleaned_data['number']
PizzaFormSet = formset_factory(PizzaForm, extra=number_of_pizzas)
formset = PizzaFormSet()
if request.method == "POST":
filled_formset = PizzaFormSet(request.POST)
if(filled_formset.is_valid()):
for form in filled_formset:
print(form.cleaned_data['topping1'])
note = 'Pizzas have been ordered!'
else:
note = 'Order was not created, please try again'
return render(request, 'pizza/pizzas.html', {'note':note, 'formset':formset})
else:
return render(request, 'pizza/pizzas.html', {'formset':formset})
def edit_order(request, pk):
pizza = Pizza.objects.get(pk=pk)
form = PizzaForm(instance=pizza)
if request.method == 'POST':
filled_form = PizzaForm(request.POST,instance=pizza)
if filled_form.is_valid():
filled_form.save()
form = filled_form
note = 'Order has been updated.'
return render(request, 'pizza/edit_order.html',
{'note':note,'pizzaform':form,'pizza':pizza})
return render(request, 'pizza/edit_order.html',
{'pizzaform':form,'pizza':pizza})
order.html
<h1>Order a Pizza</h1>
<h2>{{ note }}</h2>
{% if created_pizza_pk %}
<a href="{% url 'edit_order' created_pizza_pk %}">Edit Your
Order</a>
{% endif %}
<form action="{% url 'order' %}" method="post">
{% csrf_token %}
{{ pizzaform }}
<input type="submit" value="Order Pizza">
</form>
<br><br>
Want more than one pizza?
<form action="{% url 'pizzas' %}" method="get">
{% csrf_token %}
{{ multiple_form }}
<input type="submit" value="Get Pizzas">
</form>
order_edit.html
<h1>Edit Order</h1>
<h2>{{ note }}</h2>
<form action="{% url 'edit_order' pizza.id %}" method="post">
{% csrf_token %}
{{ pizzaform }}
<input type="submit" value="Edit Order">
您混淆了 path
和 url。如果您使用的是 Django>=2.0,请尝试以下操作:
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
path('order/', views.order, name='order'),
path('pizzas/', views.pizzas, name='pizzas'),
path('order/<int:pk>/', views.edit_order, name='edit_order'),
]
如果您使用的是 Django<2.0,那么试试这个:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.home, name='home'),
url(r'^order/', views.order, name='order'),
url(r'^pizzas/', views.pizzas, name='pizzas'),
url(r'^order/(?P<pk>\d+)/$', views.edit_order, name='edit_order'),
]
可以在 documentation 中找到更多信息。
我竭尽全力解决这个错误,但我无法解决这个错误。 给出了错误的详细信息: NoReverseMatch 在 /order/
'edit_order' 的反转,未找到参数“(17,)”。尝试了 1 种模式:['order/int:pk/$']
请求方式:POST 请求 URL:http://127.0.0.1:8000/order/ Django 版本:1.11.29 异常类型:NoReverseMatch 异常值:
'edit_order' 的反转,未找到参数“(17,)”。尝试了 1 种模式:['order/int:pk/$']
异常位置:C:\Python27\lib\site-packages\django\urls\resolvers.py in _reverse_with_prefix, line 497 Python 可执行文件:C:\Python27\python.exe Python版本:2.7.16 Python路径:
['C:\Users\dipesh\Desktop\nandiasgraden-project\nandiasgarden', 'C:\WINDOWS\SYSTEM32\python27.zip', 'C:\Python27\DLLs', 'C:\Python27\lib', 'C:\Python27\lib\plat-win', 'C:\Python27\lib\lib-tk', 'C:\Python27', 'C:\Python27\lib\site-packages']
服务器时间:2020 年 7 月 8 日,星期三 12:02:12 +0000
Url.py
来自 django.contrib 导入管理员 从 django.conf.urls 导入 url 来自披萨导入视图
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.home, name='home'),
url(r'^order/', views.order, name='order'),
url(r'^pizzas/', views.pizzas, name='pizzas'),
url(r'^order/<int:pk>/$', views.edit_order, name='edit_order'),
]
View.py
from django.shortcuts import render
from .forms import PizzaForm, MultiplePizzaForm
from django.forms import formset_factory
from .models import Pizza
def home(request):
return render(request, 'pizza/home.html')
def order(request):
multiple_form = MultiplePizzaForm()
if request.method == 'POST':
filled_form = PizzaForm(request.POST)
if filled_form.is_valid():
created_pizza = filled_form.save()
created_pizza_pk = created_pizza.id
note = 'Thanks for ordering! Your %s %s and %s pizza is on its way!'
%(filled_form.cleaned_data['size'],
filled_form.cleaned_data['topping1'],
filled_form.cleaned_data['topping2'],)
new_form = PizzaForm()
return render(request, 'pizza/order.html', {'created_pizza_pk':created_pizza_pk,
'pizzaform':new_form, 'note':note, 'multiple_form':multiple_form, })
else:
form = PizzaForm()
return render(request, 'pizza/order.html', {'multiple_form':multiple_form,
'pizzaform':form})
def pizzas(request):
number_of_pizzas = 2
filled_multiple_pizza_form = MultiplePizzaForm(request.GET)
if filled_multiple_pizza_form.is_valid():
number_of_pizzas = filled_multiple_pizza_form.cleaned_data['number']
PizzaFormSet = formset_factory(PizzaForm, extra=number_of_pizzas)
formset = PizzaFormSet()
if request.method == "POST":
filled_formset = PizzaFormSet(request.POST)
if(filled_formset.is_valid()):
for form in filled_formset:
print(form.cleaned_data['topping1'])
note = 'Pizzas have been ordered!'
else:
note = 'Order was not created, please try again'
return render(request, 'pizza/pizzas.html', {'note':note, 'formset':formset})
else:
return render(request, 'pizza/pizzas.html', {'formset':formset})
def edit_order(request, pk):
pizza = Pizza.objects.get(pk=pk)
form = PizzaForm(instance=pizza)
if request.method == 'POST':
filled_form = PizzaForm(request.POST,instance=pizza)
if filled_form.is_valid():
filled_form.save()
form = filled_form
note = 'Order has been updated.'
return render(request, 'pizza/edit_order.html',
{'note':note,'pizzaform':form,'pizza':pizza})
return render(request, 'pizza/edit_order.html',
{'pizzaform':form,'pizza':pizza})
order.html
<h1>Order a Pizza</h1>
<h2>{{ note }}</h2>
{% if created_pizza_pk %}
<a href="{% url 'edit_order' created_pizza_pk %}">Edit Your
Order</a>
{% endif %}
<form action="{% url 'order' %}" method="post">
{% csrf_token %}
{{ pizzaform }}
<input type="submit" value="Order Pizza">
</form>
<br><br>
Want more than one pizza?
<form action="{% url 'pizzas' %}" method="get">
{% csrf_token %}
{{ multiple_form }}
<input type="submit" value="Get Pizzas">
</form>
order_edit.html
<h1>Edit Order</h1>
<h2>{{ note }}</h2>
<form action="{% url 'edit_order' pizza.id %}" method="post">
{% csrf_token %}
{{ pizzaform }}
<input type="submit" value="Edit Order">
您混淆了 path
和 url。如果您使用的是 Django>=2.0,请尝试以下操作:
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
path('order/', views.order, name='order'),
path('pizzas/', views.pizzas, name='pizzas'),
path('order/<int:pk>/', views.edit_order, name='edit_order'),
]
如果您使用的是 Django<2.0,那么试试这个:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.home, name='home'),
url(r'^order/', views.order, name='order'),
url(r'^pizzas/', views.pizzas, name='pizzas'),
url(r'^order/(?P<pk>\d+)/$', views.edit_order, name='edit_order'),
]
可以在 documentation 中找到更多信息。