保存或查看表单(使用Django模板系统)

Save or view a form (using Django template system)

本文关键字:Django 系统 使用 表单 保存      更新时间:2023-09-26

我有一个表单,它必须有两种提交方式。如果用户按下"添加"按钮,它保存在数据库中,如果用户按下"视图"按钮,表单保存在会话中,所以它只是一个视图。这两个过程都是同步的,每次按下提交按钮都会重新加载页面。

如何在两个不同地址提交表单或如何添加请求。POST变量指定后端逻辑?它是可能的html, django模板系统或javascript?

<table>    
    <form class="add-cv" method="POST" action="{% url add_cv %}">
    {% csrf_token %}
    <!--A lot of form fields-->
    <tr>
        <td>            
            <input type="submit" value="{% trans "Add" %}">
            <input type="submit" value="{% trans "View" %}">
        </td>        
    </tr>
    </form>
</table>

将name属性添加到提交的name="submit1"name="submit2"中,然后,您可以在add_cv视图中区分它们:

if "submit1" in request.POST:
    do something
elif "submit2" in request.POST:
    do something

可以使用javascript或django的view函数。

要将请求发送到视图函数,然后执行相应的操作,请像这样修改html表单:

<table>    
<form class="add-cv" method="POST" action="{% url add_cv %}">
{% csrf_token %}
<!--A lot of form fields-->
<tr>
    <td>            
        <input type="submit" name="submit_Add" value="{% trans "Add" %}">
        <input type="submit" name="submit_View" value="{% trans "View" %}">
    </td>        
</tr>
</form>
</table>

这将确保您可以在请求的键中找到'submit_Add'或'submit_Value'。将POST字典发送到视图,具体取决于单击了哪个提交按钮。您可以在视图中这样区分:

def YourView(request):
  if "submit_Add" in request.POST:
       # Actions to add the values in the database.
  elif "submit_View" in request.POST:
       # Actions to save the values in the session.

或者您可以使用javascript来区分按钮。(但这将是一个迂回的方法,应该只在您绝对不能重新加载页面时使用。)要使用javascript修改你的html代码,像这样:

<table>    
<form class="add-cv" method="POST" action="{% url add_cv %}">
{% csrf_token %}
<!--A lot of form fields-->
<tr>
    <td>            
        <input type="button" onclick="func_Add();" value="{% trans "Add" %}">
        <input type="button" onclick="func_View();" value="{% trans "View" %}">
    </td>        
</tr>
</form>
</table>

在模板中定义这两个函数。

<script type="text/javascript">
  function func_Add(){
     //Required 'Add' actions.
   }
  function func_View(){
     //Required 'View' actions.
   }
</script>