【问题标题】:Search Form in Django with python使用 python 在 Django 中搜索表单
【发布时间】:2020-07-10 21:20:22
【问题描述】:

我正在尝试在我的 django 网站上添加一个简单的搜索表单。当我点击搜索按钮时,我被重定向到 new_search.html 页面(应该如此),但该页面没有显示任何结果。 感谢您的帮助!

代码是这样的:

我有一个主页,我在其中放置了这样的搜索表单:

<form method="get" action="{% url 'new_search' %}">
      {%csrf_token%}
      <input type="text" name="srh" class= "form-control" placeholder="Search">
      <button type="submit" name="submit">Search</button>
</form>

当用户搜索某些内容时,结果应显示在 new_search.html 页面中。 我在views.py中写的函数是这样的:

def new_search(request):
    if request.method == 'GET':
        srch = request.GET.get('srh')

        if srch:
            sr = Info.objects.filter(Q(band__icontains=srch) | Q(disco__icontains=srch))

            if sr:
                return render(request, 'new_search.html', {'sr':sr})
            else:
                messages.error(request, 'no results')
        else:
            return render(request, 'new_search')

    return render(request, 'new_search.html')

new_search.html 页面是这样的:

    <div>
{% if sr %}
  {% for k in sr %}
        <table width="200px">
          <tr><td>Band</td><td>{{k.band}}</td></tr>
          <tr><td>Album</td><td>{{k.disco}}</td></tr>
        </table>
  {%endfor%}
{%endif%}
    </div>

model.py 是这样的:

class Info(models.Model):
    band = models.CharField(max_length=200, help_text="Write Here")
    disco = models.CharField(max_length=200, help_text="Write Here")
    etichetta_p = models.CharField(max_length=200, help_text="Write Here")
    etichetta_d = models.CharField(max_length=200, help_text="Write Here")
    matrice = models.CharField(max_length=200, help_text="Write Here")
    anno = models.PositiveIntegerField(default=0)
    cover = models.ImageField(upload_to='images/')

    def __str__(self):
        return self.band

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('search.urls')),
    path('accounts/', include('django.contrib.auth.urls')),

应用 urls.py

urlpatterns = [
    path('', homeView.as_view(), name='home'),
    path('anno', views.anno, name='anno'),
    path('band/', bandView.as_view(), name='band'),
    path('album/', albumView.as_view(), name='album'),
    path('add/create', views.AddInfo.as_view(), name='add_create'),
    path('signup/', core_views.signup, name='signup'),
    path('new_search/', new_searchView.as_view(), name='new_search'),
]

【问题讨论】:

  • 为什么在表单中使用GET 方法?
  • 因为它给了我一个 POST 错误,但我要修复它并使用 POST 方法@errata
  • 日志中有错误吗?可以发一下吗?

标签: python django forms web


【解决方案1】:

在我看来,您应该在类视图中处理 POST 方法,因为您正在使用一个方法,例如:

class new_searchView(TemplateView):
    template_name = "new_search.html"

    def post(self, request, *args, **kwargs):
        print('FORM POSTED WITH {}'.format(request.POST['srh']))
        return render(self.request, 'new_search.html')

【讨论】:

  • 我在使用 POST 方法时一直出现 405 错误。 @勘误
  • 这意味着你有一个不同的问题......在网上搜索什么是 405 HTTP 错误,看起来你不允许在那个端点上使用 POST 方法......
  • 我想我在 new_search(request) 中遗漏了一些东西,可能是重定向网址
  • 我应该在 urls.py 中添加一些东西吗? @勘误
  • 是的,您可能必须允许该路径使用 POST 方法!
猜你喜欢
  • 2011-05-17
  • 2011-12-08
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多