2016-08-23 123 views
0

我试图将搜索功能添加到我的网站,但我遇到了一些问题。目前它告诉我“搜索”没有定义,但我的视图文件中有类。这是我迄今:Django站点上的搜索功能

urls.py

from django.conf.urls import url 
from . import views 

urlpatterns = [ 
    url(r'^$', views.home, name='home'), 
    url(r'^player/(?P<pk>\d+)/$', views.player, name='player'), 
    url(r'^season/(?P<pk>\d+)/$', views.season, name='season'), 
    url(r'^seasons/$', views.seasons, name='seasons'), 
    url(r'^search/$', Search.as_view(), name='search'), 
] 

views.py

from django.shortcuts import render, get_object_or_404, redirect 
from django.views.generic import ListView 
from .models import Player, Season, PxS, Statistics 

def home(request): 
    seasons = Season.objects.order_by('sid') 
    return render(request, 'webapp/home.html', {'seasons': seasons}) 

def player(request, pk): 
    player = get_object_or_404(Player, pk=pk) 
    return render(request, 'webapp/player.html', {'player': player, 'seasons': player.season_set.order_by('sid'), 'statistics': player.statistics_set.all()}) 

def season(request, pk): 
    season = get_object_or_404(Season, pk=pk) 
    return render(
     request, 
     'webapp/season.html', 
     {'season': season, 'players': season.players.order_by('lastname')} 
    ) 

def seasons(request): 
    seasons = Season.objects.order_by('sid') 
    return render(request, 'webapp/seasons.html', {'seasons': seasons}) 

class Search(ListView): 
    template_name = 'search.html' 
    model = Player 
    context_object_name = 'list' 

    def get_context_data(self, **kwargs): 
     context = super(Search, self).get_context_data(**kwargs) 
     context['count'] = self.get_queryset().count() 
     return context 

    def get_queryset(self): 
     pobj = Player.objects.all() 
     var_get_search = self.request.GET.get('search_box') 
     var_get_order_by = self.request.GET.get('pid') 

     if var_get_search is not None: 
      pobj = pobj.filter(playername__icontains=var_get_search) 

     if var_get_order_by is not None: 
      pobj = pobj.order_by(var_get_order_by) 

     return pobj 

任何见解是极大的赞赏。我只是一点一点地拼凑这些东西。谢谢!

+0

导入视图是不够的;你需要导入'Search'类,就像这样:'from views import Search' –

+0

@JohnGordon当我尝试的时候,我得到一个导入错误,提示“No module named views”。 – SepticReVo

+0

你应该将urls.py Search.as_view()替换为views.Search.as_view() –

回答

3

的问题是在urls.py

给URL(R '^搜索/ $',views.Search.as_view(),名称= '搜索'),

,而不仅仅是搜索。

+0

我调整了我的意见网址,但表单不提交。它只是重新加载页面... '

' – SepticReVo

+0

我怀疑你的

where action“。”指定到您现在使用的相同url,并且method =“GET”将http GET发送到服务器。 确保您已在“search.html”中处理了查询集。当提交按钮被按下时。它再次请求相同的URL(如果有任何给定的查询参数)。 如果你在不同的页面上,你想要搜索查看,然后 重构形式到 –

+0

发送到 var_get_search = self.request.GET.get('search_box') var_get_order_by = self.request.GET.get('pid') to server。 你必须处理使用客户端脚本,即jQuery或JavaScript。 作出搜索网址并追加查询窗体并请求http GET –