【问题标题】:Reverse for 'edit_order' with arguments '(17,)' not found. 1 pattern(s) tried: ['order/<int:pk>/$']未找到带有参数“(17,)”的“edit_order”的反向操作。尝试了 1 种模式:['order/<int:pk>/$']
【发布时间】:2020-10-28 21:03:04
【问题描述】:

我已经尽力解决这个错误,但我无法解决这个错误。 给出了详细错误: /order/ 处的 NoReverseMatch

未找到带有参数“(17,)”的“edit_order”的反向操作。尝试了 1 种模式:['order/int:pk/$']

请求方法:POST 请求网址:http://127.0.0.1:8000/order/ Django 版本:1.11.29 异常类型:NoReverseMatch 异常值:

未找到带有参数“(17,)”的“edit_order”的反向操作。尝试了 1 种模式:['order/int:pk/$']

异常位置:C:\Python27\lib\site-packages\django\urls\resolvers.py 在 _reverse_with_prefix 中,第 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

网址.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'),
  ]

查看.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">

【问题讨论】:

    标签: python django web-deployment


    【解决方案1】:

    您将 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

    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找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 2021-01-17
      • 2020-12-28
      • 1970-01-01
      • 2022-01-17
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多