Купа сено с Whoosh - резултатите от търсенето не се пренасочват

Успешно инсталирах whoosh и го накарах да работи с Haystack. Нещата работят добре, но се сблъсквам с един проблем, който е; след търсене на ключова дума и отпечатване на резултатите, когато щракна върху резултата (заглавието), няма да ме пренасочи към страницата на ключовата дума, върху която съм щракнал, тя е просто статична. Опитах се да добавя метод get_absolute_url. И все пак не работи. Какво ми липсва?

Модели

      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})

Търсене/търсене.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="/bg?q={{ query }}&amp;page= {{ page.previous_page_number }}">{% endif %}&laquo; Previous{% if page.has_previous %}</a>
               {% endif%}

               {% if page.has_next %}<a href="/bg?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 %}

Urlconf

          #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))

person picomon    schedule 24.06.2012    source източник


Отговори (1)


В get_absolute_url вашият URL адрес се нарича findme и вие му давате пет параметъра. Във вашата URL конфигурация URL адресът е там, но:

  • не се нарича findme (т.е. трябва да имате name="findme") и
  • също не съдържа никакви параметри.

Например, следният URL има както име, така и наименуван параметър (вижте документация за URL адреси за повече информация):

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

Трябва да създадете подобен URL адрес с параметрите main_view, side_view, address, city и state, така че Django да може правилно да обърне URL адреса и да предостави абсолютен URL адрес за модела.

person Simeon Visser    schedule 24.06.2012
comment
все още не го разбирам. Документите не помагат. Можете ли да обясните по-подробно? да не мислиш, че ще напиша друг изглед? - person picomon; 24.06.2012
comment
Не съм сигурен какво питате: функцията reverse на Django в момента не може да намери URL адреса, защото не давате правилното име и параметри. Ако направите това, тогава Django може да определи URL адреса за всеки обект в резултатите от търсенето. - person Simeon Visser; 25.06.2012
comment
когато потребителят търси ключова дума и тя връща резултата, така че ако потребителят щракне върху резултата, потребителят трябва да бъде пренасочен към страница, където ще покаже всички свойства на резултата. Надявам се, че ме разбирате? ако не, моля, уведомете ме. Благодаря. - person picomon; 25.06.2012
comment
Това го разбирам, това го отговорих по-горе. Обратната функция просто не може да изчисли URL адреса в момента, така че нямате правилни връзки. - person Simeon Visser; 25.06.2012
comment
Добре. Ще трябва ли да променя изгледа си, като направя това: def findme(request, title, main_view): и в моя url ще бъде; url(r'^find(?P‹tiitle›\d{4})/(?P‹main_view›\d{2})/$', 'views.find', name='find') моля любезно поставете начинаещ чрез. - person picomon; 25.06.2012
comment
Трябва да се уверите, че параметрите в URL са същите като параметрите, които предоставяте в get_absolute_url. Във вашия случай има пет параметъра, така че трябва да имате пет параметъра в URL конфигурацията и get_absolute_url. Предлагам да проучите документацията, за да видите как работят URL конфигурациите, тъй като имената ви в момента не са същите. Например, ако имате "findme" в get_absolute_url, тогава трябва да имате name="findme" във вашата URL конфигурация, а не name="find". По същия начин, ако изгледът ви се нарича findme, тогава в URL conf трябва да е findme, а не views.find. - person Simeon Visser; 25.06.2012