Кажется, не может вызвать error_message для отображения с django3? - PullRequest
0 голосов
/ 02 февраля 2020

Я работал над учебником по Django3 и делал с ним некоторые свои собственные вещи. У меня есть этот шаблон sales_orders/details.html

<h1>{{ sales_order.number }}</h1>
{% if error_messsage %}
  <p><strong>
    {{ error_message }}
  </strong></p>
{% endif %}
<h2>Date: {{sales_order.date}}</h2>
<form action="{% url 'sales_orders:update' sales_order.id %}" method="POST">
  {% csrf_token %}
  <input type="text" name="totalAmount" id="totalAmount" value="{{ sales_order.totalAmount }}">
  <label for="totalAmount">Total Amount: $</label>
<input type="submit" value="Update">
</form>

и эти два представления

def detail(request, salesOrder_id):
    # try:
    #     sales_order =salesOrder.objects.get(pk=salesOrder_id)
    # except salesOrder.DoesNotExist:
    #         raise Http404('Question does not exist.')
    # return render(request, 'sales_orders/detail.html', {'sales_order':sales_order})
    sales_order = get_object_or_404(salesOrder, pk=salesOrder_id)
    return render(request, 'sales_orders/detail.html', {'sales_order':sales_order})

def update(request, salesOrder_id):
    sales_order = get_object_or_404(salesOrder, pk=salesOrder_id)
    print("got sales order")
    try:
        totalAmount = float(request.POST['totalAmount'])
    except ValueError:
        print("totalAmountError")
        return render(request, 'sales_orders/detail.html', {
            'sales_order': sales_order,
            'error_message': "Amount must be a number.",
        })
    print(f"got total Amount {totalAmount}")
    if totalAmount < 0:
        print("returning error message")
        # return error_messsage
        return render(request, 'sales_orders/detail.html', {'sales_order':sales_order, 'error_message':"Amount must be postiive",})
    else:
        print("redirect")
        sales_order.totalAmount = totalAmount
        sales_order.save()
        # Return with httpresponserequest aftersuccessful
        # Dealing with post data, toprevent dobule posting
        return HttpResponseRedirect(reverse('sales_orders:results', args=(sales_order.id,)))

Я начал целенаправленно пытаться вызвать ошибки, чтобы просто показать {% if error_message %} {{error_message}}, но я не могу этого сделать, несмотря на подтверждение того, что я должен возвращать return render(request, 'sales_orders/detail.html', { 'sales_order': sales_order, 'error_message': "Amount must be a number.", }) Я не вижу, что не так с моим кодом, что error_message не появляется, когда я вводю неправильные данные. Может кто-нибудь сказать мне, что я делаю не так?

Редактировать: И URL

app_name = 'sales_orders'
urlpatterns = [
    path('', views.index, name="index"),
    path('details/<int:salesOrder_id>/', views.detail, name='detail'),
    path('update/<int:salesOrder_id>/', views.update, name='update'),
    path('<int:salesOrder_id>/results', views.results, name='results'),
    path('<int:salesOrder_id>/addToAmount', views.addToAmount, name='addToAmount')
]

1 Ответ

0 голосов
/ 02 февраля 2020

Помимо опечатки, которую я сделал, мне пришлось избавиться от обновления в моих URL-адресах, и все работало, как и ожидалось, как с {% if error_mesage%}. Обновление было только почтовым маршрутом в том, как у меня были вещи, и я думаю, что это было причиной моей проблемы.

...