【问题标题】:Django: Reverse for '*' with arguments '()' and keyword arguments '{a,b}' not found. 1 pattern(s) tried: ['order/pay/(?P<pk>\\d+)/$']Django:找不到带有参数“()”和关键字参数“{a,b}”的“*”的反向。尝试了 1 种模式:['order/pay/(?P<pk>\\d+)/$']
【发布时间】:2016-11-08 08:07:18
【问题描述】:

我有意见。触发客人订单概览的选项。还有一个将订单设置为已付款,然后应返回概览:

@login_required
def guest_detail(request, pk):
    guest = get_object_or_404(Guest, pk=pk)
    open_orders = Order.objects.filter(guest = guest, is_paid=False)
    paid_orders = Order.objects.filter(guest = guest, is_paid=True)
    if request.method == "POST":
        form = RegisterGuestForm(request.POST, instance=guest)
        if form.is_valid():
            guest = form.save(commit=False)
            guest.save()
            #post.published_date = timezone.now()
            return redirect('guest_detail', pk=guest.pk)
    else:
            form = RegisterGuestForm(instance=guest)
    context = {'form': form}
    context['open_orders'] = open_orders
    context['paid_orders'] = paid_orders
    return render(request, 'hotel/guest_detail.html', context)

这个视图被渲染到这个模板:

<div class="col-md-8 col-xs-12">
  <h3>Guest Information:</h3>
  <form method="POST" class="post-form">{% csrf_token %}
    {{ form.as_p }}
    <button type="submit" class="save-guest btn btn-default">Save</button>
  </form>
  <h3>Open orders:</h3>
  <table class="table table-condensed table-guest-order">
    <tr>
      <th>Date</th>
      <th>Amount</th>
      <th>Item</th>
      <th>Price</th>
      <th><th>
    </tr>
   {% for order in open_orders %}
   <tr>
      <td>{{ order.date }}</td>
      <td>{{ order.amount }}</td>
      <td>{{ order.item }}</td>
      <td>{{ order.price }}</td>
      <td><a href="{% url 'pay_order' pk=order.pk order_guest=order.guest.pk %}">pay</a></td>
   </tr>
   {% endfor %}
 </table>
</div>

pay_order 链接然后调用以下视图,然后它应该将我重定向回我的来源:

@login_required
def pay_order(request, *args, **kwargs):
    order = Order.objects.get(pk=kwargs['pk'])
    if order.is_paid is False:
        order.is_paid = True
        order.paid_date = timezone.now()
        order.save()
    return redirect(views.guest_detail, pk=kwargs['order_guest'])

但我收到此错误

带有参数“()”和关键字参数的“pay_order”反转 '{'order_guest': 10, 'pk': 19}' 未找到。尝试了 1 种模式: ['订单/支付/(?P\d+)/$']

这是使用的 urls.py:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^rooms/$', views.ListRoomsView.as_view(), name='rooms'),
    url(r'^service/$', views.service, name='service'),
    url(r'^contact/$', views.contact, name='contact'),
    url(r'^about/$', views.about, name='about'),
    url(r'^guests/$', views.ListGuestsView.as_view(), name='guests'),
    url(r'^guests/edit/(?P<pk>\d+)/$', views.guest_detail, name='guest_detail'),
    url(r'^register_guest/$', views.register_guest, name='register_guest'),
    url(r'^order/edit/(?P<pk>\d+)/$', views.order_detail, name='order'),
    url(r'^order/$', views.register_order, name='new_order'),
    url(r'^order/list/$', views.ListOrdersView.as_view(), name='open_orders'),
    url(r'^order/pay/(?P<pk>\d+)/$', views.pay_order, name='pay_order'),

    ]

当我为有未结付款的客人调用 guest_detail 视图时。如果客人没有未结付款,一切正常。所以我认为问题在于我尝试将客人的 pk 传递给 pay_order 视图的方式。

【问题讨论】:

  • 由于错误在于反向 URL,您应该显示您的 urls.py。
  • 在下面添加了它。感谢您的意见。

标签: django django-templates django-views


【解决方案1】:

您正在尝试将“order_guest”的参数传递给pay_order 视图,但 URL 不需要该参数,视图也没有使用它。你根本不应该通过它;将其从 {% url %} 标记中的值中取出。

<a href="{% url 'pay_order' pk=order.pk %}">pay</a>

【讨论】:

  • 也许我的推理是错误的......但是 pay_order 视图重定向到需要 guest.pk 作为输入的 guest_detail 视图。所以我必须把它传递给pay_order,对吗?问题是,如何让我的 pay_order 视图接受 order_guest?
  • 为什么不和你一样接受pk呢?它只是 URL 中的另一个参数。
猜你喜欢
  • 1970-01-01
  • 2020-11-16
  • 2023-03-11
  • 2020-11-24
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 2018-11-21
相关资源
最近更新 更多