Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何在Django中通过模板中的按钮调用view函数?_Html_Django_Python 3.x_Django Templates_Django Views - Fatal编程技术网

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以检查您是否将其发送到了右侧视图。我在上面添加了一条新注释。它给出了答案。你可以查一下。如果您相应地更新您的答案,我可以接受它,这样其他用户就可以从这个问题中受益。非常感谢。