Haystack with Whoosh- Zoekresultaten Niet doorsturen

Ik heb met succes whoosh geïnstalleerd en het met Haystack laten werken. Het werkt goed, maar ik heb te maken met één probleem: na het zoeken naar een sleutelwoord en het afdrukken van de resultaten, wanneer ik op het resultaat (titel) klik, zal het mij niet omleiden naar de pagina van het sleutelwoord waarop ik klikte, het is gewoon statisch. Ik heb geprobeerd een get_absolute_url-methode toe te voegen. Toch werkt het niet. Wat mis ik?

modellen

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

         def __unicode__(self):
             return self.title


         @modellen.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})

Zoeken/search.html

               {% block content %}

                 

Search

<form method="get" action="."> <table> {{ form.as_table }} <tr><td> </td> <td> <input type="submit" value="Search"> </td> </tr> </table> {% if query %}

Results

{% for result in page.object_list %}

{{ result.object.title }}

{% empty %}

No results found.

{% endfor %} {% if page.has_previous or page.has_next %} <div> {% if page.has_previous %}{% endif %}« Previous{% if page.has_previous %} {% endif%} {% if page.has_next %}{% endif %}Next »{% if page.has_next %}{% 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')),

Keer bekeken:

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

1 antwoord

In get_absolute_url wordt uw URL findme genoemd en geeft u deze vijf parameters. In uw URL-configuratie is de URL daar maar:

  • het wordt niet findme genoemd (d.w.z. u moet name = "findme" hebben), en
  • het bevat ook geen parameters.

De volgende URL heeft bijvoorbeeld zowel een naam als een benoemde parameter (zie documentatie over URL's voor meer informatie):

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

U moet een vergelijkbare URL maken met de parameters hoofdweergave , zijaanzicht , adres , stad en zodat Django de URL correct kan omkeren en een absolute URL voor het model kan bieden.

0
toegevoegd
snap het nog steeds niet. De documenten helpen niet. Kun je het alsjeblieft nader toelichten? denk je niet dat ik een andere mening zal schrijven?
toegevoegd de auteur picomon, de bron
wanneer de gebruiker naar een sleutelwoord zoekt en het resultaat retourneert, dus als de gebruiker op het resultaat klikt, moet de gebruiker worden omgeleid naar een pagina waar alle eigenschappen van het resultaat worden weergegeven. Ik hoop dat je begrijpt wat ik bedoel? als je dat niet doet, laat het me alsjeblieft weten. Bedankt.
toegevoegd de auteur picomon, de bron
OK. Moet ik mijn mening wijzigen door dit te doen: def findme (request, title, main_view): en in mijn url zal het zijn; url (r '^ vind (? P \ d {4})/(? P \ d {2})/$', 'views.find', name = 'find') vriendelijk gesteld een newbie door.
toegevoegd de auteur picomon, de bron
Ik weet niet zeker wat u vraagt: de functie reverse van Django kan de URL momenteel niet vinden omdat u niet de juiste naam en parameters geeft. Als u dat doet, kan Django de URL voor elk object in de zoekresultaten bepalen.
toegevoegd de auteur Simeon Visser, de bron
Ik begrijp dat, dat is wat ik hierboven heb beantwoord. De reverse-functie kan de URL gewoon niet berekenen, dus daarom zijn er geen correcte links.
toegevoegd de auteur Simeon Visser, de bron
U moet ervoor zorgen dat de parameters in de URL dezelfde zijn als de parameters die u opgeeft in get_absolute_url . In uw geval zijn er vijf parameters, dus u moet vijf parameters hebben in de URL-configuratie en get_absolute_url . Ik stel voor de documentatie te bestuderen om te zien hoe URL-configuraties werken, aangezien uw namen momenteel niet hetzelfde zijn. Als u bijvoorbeeld "findme" hebt in get_absolute_url , moet u name = "findme" hebben in uw URL-configuratie, niet name = "vinden" . Evenzo, als uw weergave findme wordt genoemd, moet dit in de URL conf findme zijn, niet views.find .
toegevoegd de auteur Simeon Visser, de bron