2012-06-24 43 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

相關問題