当我单击表单中的按钮时,我希望它在我的视图中执行此 post 函数,但它没有

When I click the button in my form, I expect it to execute this post function in my view, but it doesn't

提问人:Ko3ch 提问时间:11/15/2023 更新时间:11/16/2023 访问量:31

问:

表格

<form action="{% url 'add-coupon' %}" method="post">
 {% csrf_token %}
 <div class="coupon">
 <input id="coupon_code" class="input-text" name="coupon" value="" placeholder="ENTER COUPON CODE" type="text">
 </div>
 <button class="tp-btn-h1" type="submit">Apply coupon</button>
</form>

我的网址


from django.urls import path
from .views import AddToCart, CartItems, AddCoupon

urlpatterns = [    
    path('add-coupon/', AddCoupon.as_view(), name='add-coupon'),
]

The Views(景观酒店)

from django.shortcuts import get_object_or_404, redirect
from django.views import generic
from django.utils import timezone
from datetime import datetime
from django.contrib import messages
from .carts import Cart
from .models import Coupon
from app.models import Product

class AddCoupon(generic.View):
    print("I should see two statements below this")
    def post(self, *args, **kwargs):
        print("Button Works")
        print(messages.success(self.request, "Your coupon has been included successfully")


当我单击按钮时,我应该得到所有 3 条语句,但我只得到(我应该在下面看到两个语句),所以函数没有执行,我不知道为什么。将不胜感激任何帮助。

Django 表单 帖子

评论

1赞 willeM_ Van Onsem 11/15/2023
中的打印是在创建类时完成的,因此第一次解释文件时。class
0赞 erny 11/15/2023
你能更新你的问题吗?: 1.标题应该是一个标题,例如:“View的post方法似乎不是以django形式运行的”。2.这句话:“......我应该得到所有 3 个语句,但我只得到“(...似乎不完整。你会得到什么?

答:

1赞 erny 11/15/2023 #1
  1. 模板和视图看起来没问题。如果视图方法中的断点(例如:)出现断点,则可以使用调试器来查看它是否已执行。import pdb; pdb.set_trace()post

  2. 正如 @willem-van-onsem 所说,只有在读取类定义时才会运行类头,这是在导入时。print

  3. messages.success(...) 用于为用户生成消息,这些消息将显示在用户加载的下一页中。在我的测试中,这返回 None。

  4. 使用日志记录模块获取可以记录到控制台或日志文件的输出,例如:

import logging
log = logging.getLogger(__name__)

class AddCoupon(generic.View):

    def post(self, *args, **kwargs):
        # import pdb; pdb.set_trace()
        log.info("Button Works")
        messages.success(self.request, "Your coupon has been included successfully.")

评论

0赞 Ko3ch 11/16/2023
嘿,好的,所以忘记打印消息,整个想法是让函数执行,但即使在登录后,控制台上也没有显示任何内容,我什至没有得到 pdb_setrace() 输出。
0赞 Ko3ch 11/16/2023 #2

因此,我决定求助于基于函数的视图,并且它奏效了。类视图也适用于另一个项目,所以我真的不知道问题出在哪里,但基于函数的视图确实为这个项目削减了它。谢谢

评论

0赞 Ko3ch 11/16/2023
实际上,在一次响应后,它再次失败了。这太疯狂了!