2012-06-26 2 views
0

내 django 앱에서 haystack 및 whoosh를 검색 기능으로 사용하고 있습니다. 상황은 정상적으로 작동하지만 한 가지 문제가 있습니다. 키워드를 검색하고 결과를 출력 한 후 결과 (제목)를 클릭하면 클릭 한 키워드의 페이지로 리다이렉트하지 않고 단지 정적입니다. 나는 get_absolute_url 메소드를 추가하려고 시도했다. 아직 효과가 없습니다. 내가 뭘 놓치고 있니? get_absolute_url이 제목을 클릭해야만 검색 한 키워드의 페이지로 사용자를 리디렉션하도록하고 싶습니다.Redirecting Failed- get_absolute_url()

N : B 아래는 사용자가 데이터를 게시하고 데이터가 동일한 페이지에 필터되도록하는 양식입니다.

모델

 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): 
      findme_args = { 
       'title': self.title, 
       'address': self.address, 
       'city': self.city, 
       'state': self.state, 
       'main_view': self.main_view, 
       'side_view': self.side_view 
     } 
     return ('findme',(), findme_args) 

검색/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 %} 

조회수 :

  def findme(request,title='title',address='address',city='city',state='state',main_view='main_view',side_view='side_view'): 
       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,'findme':True}) 
      extra_data_context.update({'Meeks':Meek.objects.filter(user=request.user)}) 
      return render_to_response('postme.html',extra_data_context,context_instance=RequestContext(request)) 

URL을

#I created a urls.py file in my project app(testapp) folder 
     urlpatterns = patterns('testapp.views', 
     url(r'^$', findme, name='findme'), 
     url(r'^find/(?P<title>\w+)/(?P<address>\w+)/(?P<city>\w+)/(?P<state>\w+)/(?P<main_view>\w+)/(?P<side_view>\w+)/$', 'findme', name='findme_search'), 

    ) 

    #In my project(test) folder, where the main urls.py is, I include the above url. 

      urlpatterns = patterns('', 
      url(r'^find/$', include('testapp.urls')), 
      #haystack url where you can search 
       (r'^search/', include('haystack.urls')), 

     ) 

답변

0

self.main_viewself.side_view\w+ 정규 표현식과 일치하지 않습니다. 게다가 그것은 이미지입니다. 이미지를 URL 문자열에 넣을 수 없으면 일부 문자열을 가져와야합니다. 또는 어쨌든 (DB에 저장된) 객체 인 경우 URL에 해당 객체의 primamry 키인 하나의 인수 만 제공 할 수 있습니다.

get_absolute_url 방법에 대한 테스트도 작성해야합니다. 그러면 실제 오류를 빠르게 얻을 수 있습니다.

0

get_absolute_url의 마지막 줄

  return ('findme_search',(), findme_args) 

대신

  return ('findme',(), findme_args) 

이어야 하는가?

+0

변경했지만 작동하지 않습니다. – picomon