2012-06-24 45 views
1

我成功安装了whoosh并使其与Haystack一起工作。事情工作正常,但我面临的一个问题是,在搜索关键字并打印结果后,当我点击结果(标题)时,它不会将我重定向到我单击的关键字的页面,它只是静态的。我试着添加一个get_absolute_url方法。但它不起作用。我错过了什么?Haystack with Whoosh-搜索结果不重定向

模型

 class Meek(models.Model): 
     user=models.ForeignKey(User) 
     title=models.CharField(max_length=250, unique=True) 
     address=models.CharField(max_length=200) 
     city=models.CharField(max_length=200) 
     state=models.CharField(max_length=200) 
     main_view=models.ImageField(upload_to="photos",blank=True, null=True) 
     side_view=models.ImageField(upload_to="photos",blank=True, null=True) 
     pub_date=models.DateTimeField() 

     def __unicode__(self): 
      return self.title 


     @models.permalink 
     def get_absolute_url(self): 
      return ('findme',(), { 
       'main_view': self.main_view, 
       'side_view': self.side_view, 
       'address': self.address, 
       'city': self.city, 
       'state': self.state}) 

搜索/ search.html

   {% block content %} 

       <h2>Search</h2> 


       <form method="get" action="."> 

       <table> 
        {{ form.as_table }} 
       <tr><td>&nbsp;</td> 
       <td> 
       <input type="submit" value="Search"> 
       </td> 
       </tr> 
       </table> 
       {% if query %} 
       <h3>Results</h3> 
       {% for result in page.object_list %} 
       <p> 
       <a href= "{{ result.object.get_absolute_url }}" >{{ result.object.title }}</a> 
       </p> 
       {% empty %} 
        <p>No results found.</p> 
       {% endfor %} 

       {% if page.has_previous or page.has_next %} 
        <div> 
         {% if page.has_previous %}<a href="?q={{ query }}&amp;page= {{ page.previous_page_number }}">{% endif %}&laquo; Previous{% if page.has_previous %}</a> 
       {% endif%} 

       {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}Next &raquo;{% if page.has_next %}</a>{% endif %}</div> 
       {% endif %} 

       {% else %} 

        {# Show some example queries to run, maybe query syntax, something else? #} 

       {% endif %} 
       </form> 

       {% endblock %} 

URL配置

  #url where the objects are posted. 
      (r'^find/$', findme), 

     #haystack url where you can search 
     (r'^search/', include('haystack.urls')), 

浏览:

  def findme(request): 
       extra_data_context={} 
        #if there's nothing in the field do nothing. 
       if request.method=="POST": 
        form=MeekForm(request.POST, request.FILES) 
        if form.is_valid(): 
        data=form.cleaned_data 
        newmeeks=Meek(
         user=request.user, 
         pub_date=datetime.datetime.now(), 
         title=data['title'], 
         main_view=request.FILES['main_view'], 
         side_view=request.FILES['side_view'], 
         address=data['address'], 
         city=data['city'], 
         state=data['state']) 
        newmeeks.save() 
       extra_data_context.update({'MeekForm':form}) 
      else: 
       form = MeekForm() 
       extra_data_context.update({'MeekForm':form}) 
      extra_data_context.update({'Meeks':Meek.objects.filter(user=request.user)}) 
      return render_to_response('postme.html',extra_data_context,context_instance=RequestContext(request)) 

回答

0

get_absolute_url中,你的网址叫做findme,你给它五个参数。在你的URL配置中,URL是有,但:

  • 那就不叫findme(即,你需要有name="findme")和
  • 它也不会包含任何参数。

例如,下面的URL都有一个名称和一个名为参数(见documentation on URLs了解更多信息):

(r'^articles/(?P<year>\d{4})/$', 'news.views.year_archive', name="news_year_archive"), 

你需要创建一个类似的URL与参数main_viewside_viewaddresscitystate,因此Django可以正确地反转网址并为模型提供绝对网址。

+0

仍然不明白。该文件不起作用。你能否请进一步解释?你不觉得我会写另一种观点吗? – picomon

+0

我不确定你在问什么:Django的'reverse'函数目前无法找到该URL,因为你没有给出正确的名称和参数。如果你这样做,那么Django可以确定搜索结果中每个对象的URL。 –

+0

当用户搜索一个关键字并返回结果时,如果用户点击结果,用户应该被重定向到一个页面,在那里它将显示结果的每个属性。我希望你明白我的观点?如果你不请,让我知道。谢谢。 – picomon

相关问题