Html 如何在Django中通过模板中的按钮调用view函数?
我搜索了一些相关的问题,但我不知道怎么做。这就是我在这里发布新问题的原因 我有一个Html 如何在Django中通过模板中的按钮调用view函数?,html,django,python-3.x,django-templates,django-views,Html,Django,Python 3.x,Django Templates,Django Views,我搜索了一些相关的问题,但我不知道怎么做。这就是我在这里发布新问题的原因 我有一个base.html文件,还有一个按钮,它应该从views.py文件运行一个函数。以下是按钮代码: <form role="form" action="" method="POST"> {% csrf_token %} <input type="submit" class="btn" value="Click" name="mybtn"> </form> 在我的产品”url.
base.html
文件,还有一个按钮,它应该从views.py
文件运行一个函数。以下是按钮代码:
<form role="form" action="" method="POST">
{% csrf_token %}
<input type="submit" class="btn" value="Click" name="mybtn">
</form>
在我的产品
”url.py
文件中:
def create_new_product(request):
if request.method == 'POST':
'''Execute the code here'''
return render (request, 'products/base.html')
app_name = 'products'
urlpatterns = [
path('create-new-product/', views.create_new_product),
path('', views.IndexView.as_view(), name='base'),
path('<int:pk>/', views.DetailView.as_view(), name='detail'),
]
app_name='products'
URL模式=[
路径('create-new-product/',views.create\u new\u product),
路径(“”,views.IndexView.as_view(),name='base'),
路径('/',views.DetailView.as_view(),name='detail'),
]
通常我在views.py
文件中有一个IndexView
类,该类列出了所有当前产品,我期望从上述功能中得到的是,它将生成新产品,并且新产品也将列在“产品”页面中
顺便说一下,上面的函数不在
IndexView
类中。您将与action=“#”
请改为尝试
action=“
,这样您将保持在同一页面上,但会重新加载。更新:
阅读您的评论。
name参数对于在Django模板中调用url非常有用,如:
path('create-new-product/', views.create_new_product, name='create_new_product')
应用程序名称=‘产品’非常重要。它告诉Django在哪里检查您的路径。因此,您可以通过以下方式在项目中的任何位置调用视图:
<a href="{% url 'products:create_new_product' %}">...</a>
<form action="{% url 'products:create_new_product' %}">...</form>
...
通过编写action=“#”
,无论请求返回什么,您都会停留在同一页上:我从那里删除了,但函数不起作用。我没有看到产生任何新产品。正常情况下,该功能工作正常。现在我只想把它绑定到产品页面上的一个按钮上。顺便说一下,我也检查了你共享的链接,谢谢。你确定你发送到了正确的视图吗。我发现用get创建一个新元素非常奇怪(事实上,get不应该有任何副作用,这违反了合同)。我不确定。我认为“name”属性就是这里的键,我可以用这个键将按钮点击请求绑定到函数。这就是为什么我在get内的函数中使用这个“mybtn”。我对它很陌生。我是说这完全违背了HTTP的工作原理,GET请求应该是幂等的,这意味着如果我刷新数千次,数据库与以前完全相同:而且action=“
相当于不提及它。我尝试过,但函数不起作用。按钮似乎无法向函数发出命令。我是否可以查看您的URL.py以检查您是否将其发送到了右侧视图。我在上面添加了一条新注释。它给出了答案。你可以查一下。如果您相应地更新您的答案,我可以接受它,这样其他用户就可以从这个问题中受益。非常感谢。