【问题标题】:reload page automatically without needing to RE-enter URL again Django自动重新加载页面而无需再次重新输入 URL Django
【发布时间】:2017-12-05 04:40:27
【问题描述】:

我的网页由两部分组成,上半部分是让用户输入数据的部分,而下半部分以表格形式显示数据库中的所有数据。当用户选择上部的“添加”按钮时,数据将被保存到数据库中,并在网页底部的表格中输出。一旦我选择“添加”按钮,是否有显示表格? Right now what the code is doing is when "Add" button is being selected, it will load a new form but then the whole table will disappear.我必须再次手动输入此地址“http://127.0.0.1:8000/hrfinance/lscholarship/”,然后才会出现表格。即使刷新页面也不起作用。以下是我在

中的代码

views.py:

def scholarship(request, id=None):
    query_results = []
    if request.method == "POST":
        form = ScholarshipForm(request.POST)
        if form.is_valid():
            scholarship = form.save(commit=False)
            scholarship.save()
    else:
        form = ScholarshipForm()
        id = request.GET.get('scholarship')
    query_results = Scholarship.objects.all()
    data = {
            'query_results':query_results,
            'form': form
           }
    return render(request, 'hrfinance/add_remove_scholarship.html', data)

models.py

class Application(models.Model):
    studentID = models.CharField("Student ID", max_length=8, validators=[MinLengthValidator(8)], primary_key=True, default="")
    studentName = models.CharField("Student Name", max_length=500, default="")
    scholarship = models.TextField("Scholarship")

add_remove_scholarship.html

<div align="center" >
<form method="POST" onsubmit="return validation()" action="">
{% csrf_token %}
{{ form.errors }}
    <p>Upload File: {{ form.doc }}</p>
    <p>Faculty: {{ form.faculty }} </p>
    <p>Opening date: <input id="odate" type="date" name="openDate"> </p>
    <p>Closing date: {{ form.closeDate }} </p>
    <input type="submit" name="AddScholarship" value="Add Scholarship"   >
</form>
</div>
<br></br>
    <button id="button" type="button">Delete Selected Scholarship</button>
    <br></br>
    {{query_results}}
    <form method="POST" action="">
    {% csrf_token %}
<table  id="example" class="display" cellspacing="0" width="100%" border="1.5px">
    <tr align="center">
        <th> Scholarship </th>
        <th> Faculty </th>
        <th> Open Date </th>
        <th> Close Date </th>
    </tr>
    {% for item in query_results %}
    <tr align="center">
        <td>{{item.doc}}</td>
        <td>{{item.faculty}}</td>
        <td>{{item.openDate}}</td>
        <td>{{item.closeDate}}</td>
    </tr>
    {% endfor %}
    </table>
    </form>

【问题讨论】:

    标签: python html django reload


    【解决方案1】:

    最佳做法是使用Post/Redirect/Get 模式。这也将解决您的问题:GET 请求将清除表单并显示新的查询结果。

    如果表单保存成功,您只需返回一个重定向到当前页面。然后浏览器将执行 GET 请求。这可以防止意外的重复表单提交,例如当仍然是 POST 请求时,用户重新加载当前页面:

    from django.shortcuts import redirect
    
    def scholarship(request, id=None):
        query_results = []
        if request.method == "POST":
            form = ScholarshipForm(request.POST)
            if form.is_valid():
                scholarship = form.save(commit=False)
                scholarship.save()
                # Return a redirect to the same page
                return redirect('/path/to/current/page/')
        ...
    

    【讨论】:

    • '/path/to/current/page/' is : 'lscholarship' 如果我的 urls.py 是 : url(r'^lscholarship/$', views.scholarship, name='奖学金'), ??
    • 我尝试了“lscholarship”,但我会收到一条错误消息:“NoReverseMatch at /hrfinance/lscholarship/ 未找到“lscholarship”的反向。“lscholarship”不是有效的视图函数或模式名称。 "请帮忙,因为我对 django 真的很陌生,我正在学习它
    • 使用redirect(),您可以使用url 路径(如/hrfinance/lscholarship/)或url 的名称,这将被Django 反转。您是否使用 URL 命名空间(即通过在 urlconf 中设置 app_name 属性)?否则,redirect('lscholarship') 应该可以正常工作。
    【解决方案2】:
    def scholarship(request, id=None):
        query_results = []
        if request.method == "POST":
            form = ScholarshipForm(request.POST)
            if form.is_valid():
                scholarship = form.save(commit=False)
                scholarship.save()
    
        else:
            id = request.GET.get('scholarship')
        query_results = Scholarship.objects.all()
        form = ScholarshipForm()
        data = {
                'query_results':query_results,
                'form': form
               }
        return render(request, 'hrfinance/add_remove_scholarship.html', data)
    

    您需要将查询移出else 条件。

    虽然,随着数据库中行数的增加,这种方法会花费很多时间。更好的方法是使用jquery Ajax 方法更新数据库中的数据,并在数据库更新后使用javascript/Jquery 动态显示。

    【讨论】:

    • 这项工作是否解决了您的问题?恐怕我无法为您的问题编写代码。但我相信当你用谷歌搜索它时,你会找到很多学习 Jquery 的教程。一切顺利。
    • 是的,它有效。非常感谢:) 但表格将包含我输入的前一个。有什么办法可以让所有字段都为空?
    • 我需要查看您的模型和模板。
    • 我已经编辑了我的问题以包含模型和模板
    猜你喜欢
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2011-05-17
    • 2016-02-01
    • 1970-01-01
    • 2018-11-15
    相关资源
    最近更新 更多