【问题标题】:Haystack with Whoosh- Search Results Not Redirecting带有嗖嗖声的干草堆-搜索结果不重定向
【发布时间】:2012-06-24 10:16:00
【问题描述】:

我成功安装了 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})

搜索/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 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))

【问题讨论】:

    标签: python django django-haystack whoosh


    【解决方案1】:

    get_absolute_url 中,您的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"),
    

    您需要使用参数main_viewside_viewaddresscitystate 创建一个类似的 URL,以便 Django 可以正确地反转 URL 并为模型提供绝对 URL。

    【讨论】:

    • 还是不明白。文档没有帮助。你能进一步解释一下吗?你不觉得我会写另一个视图吗?
    • 我不确定你在问什么:Django 的 reverse 函数目前无法找到 URL,因为你没有提供正确的名称和参数。如果你这样做了,那么 Django 可以确定搜索结果中每个对象的 URL。
    • 当用户搜索关键字并返回结果时,如果用户点击结果,用户应该被重定向到一个页面,该页面将显示结果的每个属性。我希望你明白我的意思吗?如果你不告诉我。谢谢。
    • 我明白,这就是我上面的回答。反向函数现在根本无法计算 URL,所以这就是您没有正确链接的原因。
    • 好的。我是否必须通过这样做来修改我的视图: def findme(request, title, main_view): 在我的 url 中它会是; url(r'^find(?P\d{4})/(?P<main_view>\d{2})/$', 'views.find', name='find') 请把一个新手通过。</main_view>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多