Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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
Python Django-带表单的ListView,如何重定向回表单页面?_Python_Django_Forms_Listview - Fatal编程技术网

Python Django-带表单的ListView,如何重定向回表单页面?

Python Django-带表单的ListView,如何重定向回表单页面?,python,django,forms,listview,Python,Django,Forms,Listview,因此,我有一个带有练习列表的ListView(分页为每页1个)。在每个页面中,我几乎没有用户需要填写的输入。我设法找到了如何将ListView附加到表单的解决方案,但我找不到如何在提交后保持在同一页面上的解决方案 网址: urlpatterns = [ path('programs/', ProgramListView.as_view(), name='web-programs'), path('programs/<int:pk>/', ExerciseListVie

因此,我有一个带有练习列表的ListView(分页为每页1个)。在每个页面中,我几乎没有用户需要填写的输入。我设法找到了如何将ListView附加到表单的解决方案,但我找不到如何在提交后保持在同一页面上的解决方案

网址:

urlpatterns = [
    path('programs/', ProgramListView.as_view(), name='web-programs'),
    path('programs/<int:pk>/', ExerciseListView.as_view(), name='program-detail'),
    path('data/', views.add_data, name='data-submit'),
template.html:

{% extends "program/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <h3> Program Exercises List </h3>
    {% for exercise in exercises %}
        <article class="media content-section">
            <div class="media-body">
                <div class="article-metadata">
                    {% if user.is_superuser %}
                        <a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'exercise-update' exercise.id %}">Update</a>
                        <a class="btn btn-danger btn-sm mt-1 mb-1" href="{% url 'exercise-delete' exercise.id %}">Delete</a>
                        <p class="article-content">{{ exercise.name }}</p>
                    {% else %}
                        <p class="article-content">{{ exercise.name }}</p>
                    {% endif %}
                </div>
                <div class="article-metadata">
                    <p class="article-content">{{ exercise.description }}</p>
                    <p class="article-content">{{ exercise.breath_method}}</p>
                    <p class="article-content">{{ exercise.recovery_method }}</p>
                    <p class="article-content">{{ exercise.measure_method }}</p>
                    <p class="article-content">{{ exercise.load_share }}</p>
                    <p class="article-content">{{ exercise.notes }}</p>
                    <p class="article-content">{{ exercise.extra_info }}</p>
                    <p class="article-content">{{ exercise.reps }}</p>
                    <p class="article-content">{{ exercise.sets }}</p>
                </div>
                  <form action="{% url 'data-submit' %}" method="POST" enctype="multipart/form-data">
                        {% csrf_token %}
                        <fieldset class="form-group">
                            <legend class="border-bottom mb-4">Exercise Measurements</legend>
                            {{ form|crispy }}
                        </fieldset>
                        <div class="form-group">
                            <button class="btn btn-outline-info" type="submit">Save</button>
                        </div>
                  </form>
            </div>
        </article>
    {% endfor %}
    {% if is_paginated %}

        {% if page_obj.has_previous %}
            <a class="btn btn-outline-info mb-4" href="?page={{ page_obj.previous_page_number }}">Previous Exercise</a>
        {% endif %}

        {% if page_obj.has_next %}
            <a class="btn btn-outline-info mb-4" href="?page={{ page_obj.next_page_number }}">Next Exercise</a>
        {% else %}
            <a class="btn btn-outline-info mb-4" href="{% url 'web-home' %}">Exit</a>
        {% endif %}

    {% endif %}
{% endblock content %}
在views.py中,我将“重定向”保留为“?”,因为我不知道在那里添加什么。 我无法更改template.html中的“操作”,因为此链接用于
def add\u data(request)
因此,它将保存我的输入。 一旦我提交,它会将新数据保存到我的数据库中,但我不知道如何保持在同一页面上继续我的练习

谢谢

  • 您需要使用jQuery来实现这个结果。下载它,粘贴到js文件夹并将其添加到
    program/base.html
  • 
    
  • 我建议您在
    base.html
    在文件底部的某个地方
  • 然后,执行以下操作:
  • 
    $(“#提交btn”).submit(函数(事件){
    //阻止默认操作,因此不刷新页面
    event.preventDefault();
    变量形式=$(此);
    var posting=$.post(form.attr('action'),form.serialize());
    过帐.完成(功能(数据){
    //完成
    });
    过帐失败(功能(数据){
    //失败
    });
    });
    ...
    {%csrf_令牌%}
    运动测量
    {{form | crispy}}
    拯救
    
    您有一个正在练习的程序,所以使用它获取程序id查看您的数据表您有一个练习字段“如果我没有错”是外键

    from django.shortcuts import redirect, reverse
    def add_data(request):
        page=request.GET.get('page')
        page='?page={}'.format(page) if page else ''
        if request.method == "POST":
            form = DataForm(request.POST)
            if form.is_valid():
                data=form.save()
                return redirect(reverse('program-detail', kwargs={'pk':data.exercise.program.pk})+ page)
    
    若要重定向到同一页面,请在url中检查并传递页面参数,格式如下

    <form action="{% url 'data-submit' %}{%if request.GET.page%}?page={{request.GET.page}}{%endif%}" method="POST" enctype="multipart/form-data">{% csrf_token %}
    
    {%csrf\u令牌%}
    
    是的,你说得对,我确实有外键。我现在试过了,好像他不认识-“'program-detail',pk=data.exercise.program.pk”。我在数据下面有一条红线。知道为什么吗?我认为重定向方法不能接收pk作为参数。我在文档中找不到它,但我可能错了。这是文档,您也可以使用完整的url重定向('/programs/{}/'.format(data.exercise.program.id))。我尝试了两种方法,但它无法识别“pk=data…”。知道为什么吗?谢谢,我有点迷路了。这将如何帮助我重新定向?很抱歉我的误解,我没有在这个框架中使用那么长的时间。它发送post请求而没有打开新的视图/url,所以你停留在同一个页面上。这叫做ajax。好的,这是一个很好的解决方案。我在函数的“重定向”中添加了什么?什么都没有。改用
    返回HttpResponse(状态=200)
    。或任何其他代码,如果表单无效等。我是否需要创建程序/base.html?确切的位置在哪里?在我的模板中?我需要打电话吗?谢谢
    {% block js %}{% endblock js %} 
    
    from django.shortcuts import redirect, reverse
    def add_data(request):
        page=request.GET.get('page')
        page='?page={}'.format(page) if page else ''
        if request.method == "POST":
            form = DataForm(request.POST)
            if form.is_valid():
                data=form.save()
                return redirect(reverse('program-detail', kwargs={'pk':data.exercise.program.pk})+ page)
    
    <form action="{% url 'data-submit' %}{%if request.GET.page%}?page={{request.GET.page}}{%endif%}" method="POST" enctype="multipart/form-data">{% csrf_token %}