【问题标题】:Back button stores previous data DJANGO后退按钮存储以前的数据 DJANGO
【发布时间】:2020-03-08 13:53:56
【问题描述】:

我正在使用 django 创建一个应用程序,用户可以在其中搜索某些事物的定义。所以他正在输入一个词“安全”来得到这个定义。他得到了结果,然后他按下了返回按钮。然后他得到一个网站,但搜索字段仍然存储旧数据/输入“安全”。我该如何解决这个问题?

模板:

<div>
    <h1><a href="/">Drink drank drunk</a></h1>
</div>
<h1>Jakie masz skladniki?</h1>

<form action="{% url 'search_results' %}" method="get">
  <input name="q" type="text" placeholder="Search...">
</form>
{% if messages %}
<ul class="messages">
  {% for message in messages %}
  <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
  {% endfor %}
</ul>
{% endif %}

观看次数:

from django.shortcuts import render
from django.db.models import Q #new

from .models import Recipe
from .models import Ingredient

from django.contrib import messages
from django.shortcuts import redirect

def drink_list(request):
    template = "drinks/drink_list.html"
    return render(request, template)

def search_results(besos):

    query = besos.GET.get('q')
    if not query or query == ' ' or query == '  ' or query == '   ':
    #how to write this ^  in shortest way? if string is empty then return 'drink_list'
        messages.error(besos, "Search field can not be empty")
        return redirect('drink_list')

    else:
        q = Q()
        for queries in query.split():
            q |= (Q(ingredients__ingredient_name__icontains=queries))
            #why it look for 'sok z cytryny' and show as well sok z limonki
        results = Recipe.objects.filter(q)
        template = "drinks/search_results.html"
        context = {
        'results' : results,
        }
        return render(besos, template, context)

网址:

urlpatterns = [
    path('', views.drink_list, name='drink_list'),
    path('search/', views.search_results, name='search_results'),
    path('no_name/', views.drink_list, name='drink_list'),
]

【问题讨论】:

  • 你能发布你到目前为止的代码吗?一种方法是研究使用request.session
  • 我已经在上面更新了 :)
  • 这有帮助吗? &lt;input name="q" type="text" placeholder="Search..." value=""&gt;
  • 嗨@LuiTe,有 Django 文档。 Django 中有一个 flush() 来清除当前会话。详细解释请见:docs.djangoproject.com/en/2.2/topics/http/sessions/…
  • 我自己没有测试。让我知道它是否有效!

标签: django google-chrome button back


【解决方案1】:

用一些 javascript 试试这个怎么样?您可以在页面加载时将输入标签置空。

<script>
    window.onload = function(){
                        document.getElementByName("q").value = "";
                    }
</script>

或者你可以试试这个

<script>
    if (window.performance && window.performance.navigation.type == window.performance.navigation.TYPE_BACK_FORWARD) {
        document.getElementByName("q").value = "";
    }
</script>

【讨论】:

  • 我已经在我的模板中实现了它,但它没有帮助。我对 javascript 还不是很熟悉。
  • 刚刚编辑了我的答案,希望添加的替代方案会有所帮助。
  • 不幸的是,输入的内容仍然被存储
  • 嗨,我找到了添加自动完成=“关闭”的解决方案。感谢您的试用!
猜你喜欢
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多