问题描述
我成功安装了whoosh,并与Haystack一起工作。事情工作正常,但我正面临着一个问题:在搜索关键字并打印出结果后,当我点击结果(标题)时,它不会将我重定向到我点击的关键字的页面,它只是静态的。我尝试添加一个get_absolute_url方法。但是它不起作用我缺少什么?模型
class Meek
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 / search.html
{%block content%}
< h2>搜索< / h2>
< form method =getaction =。>
< table>
{{form.as_table}}
< tr>< td>& nbsp;< / td>
< td>
< input type =submitvalue =Search>
< / td>
< / tr>
< / table>
{%if query%}
< h3>结果< / h3>
{%for page.object_list%}
< p>
< a href ={{result.object.get_absolute_url}}> {{result.object.title}}< / a>
< / p>
{%empty%}
< p>未找到结果。< / p>
{%endfor%}
{%if page.has_previous或page.has_next%}
< div>
{%if page.has_previous%}< a href =?q = {{query}}& amp; amp; amp; amp; page = {{page.previous_page_number}}> {%endif%}& ;上一页{%if page.has_previous%}< / a>
{%endif%}
{%if page.has_next%}< a href =?q = {{query}}& amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; }}> {%endif%} Next& raquo; {%if page.has_next%}< / a> {%endif%}< / div>
{%endif%}
{%else%}
{#显示一些运行示例查询,也可能是查询语法,还有其他? #}
{%endif%}
< / form>
{%endblock%}
Urlconf
#url对象发布的位置。
(r'^ find / $',findme),
#haystack url你可以在哪里搜索
(r'^ search /',include('haystack.urls' )),
视图:
def findme(request):
extra_data_context = {}
#if这个字段什么都没做。
如果request.method ==POST:
form = MeekForm(request.POST,request.FILES)
如果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))
在 get_absolute_url
URL被称为 findme
,你给它五个参数。在您的网址配置中,URL位于此处:
- 不会调用
findme
(即,您需要具有name =findme
)和 - 它也不包含任何参数。 li>
例如,以下URL同时具有名称和命名参数(请参阅了解更多信息):
code>(r'^ articles /(?P< year> \d {4})/ $','news.views.year_archive',name =news_year_archive),
您需要使用参数 main_view
, side_view
,地址
, city
和 state
所以Django可以正确地反转URL并提供模型的绝对URL。
I successfully installed whoosh and made it work with Haystack. Things are working fine but I'm facing one problem which is; after searching for a keyword and it print out the results, when I click on the result(title), It won't redirect me to the page of the keyword I clicked on, it's just static. I tried adding a get_absolute_url method. Yet it's not working. What I'm I missing?
Models
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/search.html
{% block content %}
<h2>Search</h2>
<form method="get" action=".">
<table>
{{ form.as_table }}
<tr><td> </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 }}&page= {{ page.previous_page_number }}">{% endif %}« Previous{% if page.has_previous %}</a>
{% endif%}
{% if page.has_next %}<a href="?q={{ query }}&page={{ page.next_page_number }}">{% endif %}Next »{% 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')),
Views:
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))
In get_absolute_url
your URL is called findme
and you're giving it five parameters. In your URL configuration, the URL is there but:
- it is not called
findme
(i.e., you need to havename="findme"
), and - it also does not contain any parameters.
For example, the following URL has both a name and a named parameter (see documentation on URLs for more information):
(r'^articles/(?P<year>\d{4})/$', 'news.views.year_archive', name="news_year_archive"),
You need to create a similar URL with the parameters main_view
, side_view
, address
, city
and state
so Django can properly reverse the URL and provide an absolute URL for the model.
这篇关于Haystack with Whoosh-搜索结果不重定向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!