【问题标题】:i get an error. django.urls.exceptions.NoReverseMatch我得到一个错误。 django.urls.exceptions.NoReverseMatch
【发布时间】:2020-10-07 02:33:02
【问题描述】:

我几天前开始学习Django,我得到这个错误:

django.urls.exceptions.NoReverseMatch:“create_order”的反向,没有找不到参数。尝试了 1 种模式:['create_order/(?P[^/]+)/$']*

urls.py

 path('create_order/<str:pk>/', views.createOrder, name='create_order'),

views.py

def createOrder(request, pk):
customer = Customer.objects.get(id=pk)
form = OrderForm(initial={'customer': customer})
if request.method == 'POST':
    # print('Printing:', request.POST)
    form = OrderForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('/')
context = {
    'form': form
}
return render(request, 'accounts/order_form.html', context)

order_form.html

{%  extends 'accounts/main.html' %}
{% load static %}
{% block content %}
<br>
<div class="row">
    <div class="col-12 col-md-6">
        <div class="card card-body">
            <form action="" method="post">
                {% csrf_token %}
                {{form}}
                <input class="btn btn-sm btn-danger" type="submit" value="Conform">
            </form>
        </div>
    </div>
</div>

{% endblock %}

customer.html

<div class="row">
	<div class="col-md">
		<div class="card card-body">
			<h5>Customer:</h5>
			<hr>
			<a class="btn btn-outline-info  btn-sm btn-block" href="">Update Customer</a>
			<a class="btn btn-outline-info  btn-sm btn-block" href="{% url 'create_order' customer.id %}">Place Order</a>

		</div>
	</div>

【问题讨论】:

  • 哪个视图呈现customer.html?可以分享一下代码吗?

标签: html django


【解决方案1】:

正如错误所说,它尝试使用空参数,这意味着上下文中没有可用的客户价值。所以你需要通过上下文发送customer 值,像这样:

context = {
    'customer' : customer, 
    'form': form
}

【讨论】:

    【解决方案2】:

    我也在关注 youtube(dennis ivy) 上的本教程并得到了同样的错误, 不知道是什么问题,只是将来自 github 的文件 urls.py 替换为相同的上下文,它没有显示该错误。

    urls.py

    from django.urls import path
    from . import views
    urlpatterns = [
        path('', views.home, name="home"),
        path('products/', views.products, name='products'),
        path('customer/<str:pk_test>/', views.customer, name="customer"),
    
        path('create_order/<str:pk>/', views.createOrder, name="create_order"),
        path('update_order/<str:pk>/', views.updateOrder, name="update_order"),
        path('delete_order/<str:pk>/', views.deleteOrder, name="delete_order"),
    
    
    ]
    

    views.py

    from django.forms import inlineformset_factory
    def createOrder(request, pk):
        OrderFormSet = inlineformset_factory(Customer, Order, fields=('product', 'status'), extra=10 )
        customer = Customer.objects.get(id=pk)
        formset = OrderFormSet(queryset=Order.objects.none(),instance=customer)
        #form = OrderForm(initial={'customer':customer})
        if request.method == 'POST':
            #print('Printing POST:', request.POST)
            #form = OrderForm(request.POST)
            formset = OrderFormSet(request.POST, instance=customer)
            if formset.is_valid():
                formset.save()
                return redirect('/')
    
        context = {'form':formset}
        return render(request, 'accounts/order_form.html', context)
    

    order_form.html

    {%  extends 'accounts/main.html' %}
    {% load static %}
    {% block content %}
    
    
    <div class="row">
        <div class="col-md-6">
            <div class="card card-body">
    
                <form action="" method="POST">
                    {% csrf_token %}
                    {{ form.management_form }}
                    {% for field in form %}
                        {{field}}
                        <hr>
                    {% endfor %}
    
                    <input type="submit" name="Submit">
                </form>
    
            </div>
        </div>
    </div>
    
    
    {% endblock %}
    

    再次,我不知道为什么它会显示此错误以及问题出在哪里,但只是用来自 github 的相同代码重新替换它并且它有效..如果有人知道它是如何工作的,那将在不久的将来非常有用.感谢所有问候哈里斯艾哈迈德

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-11
      相关资源
      最近更新 更多