所以在我的views.py
中def search(request):
hotCat = Category.objects.get_hotCat()
context = {
'hotCat':hotCat
}
return render(request, 'search/search.html',context)
在我的搜索/ search.html中,我做到了 {{hotCat}} 但什么都没有出现。
这里;是我的search.html的完整代码
{% extends 'base.html' %}
{% block head %}
{% load crispy_forms_tags %}
<style>
#div_id_models{
visibility: hidden;
}
</style>
{% endblock %}
{% block content %}
<div class="col-sm-3">
<form method="get" action=".">
<table>
{{ form|crispy }}
<tr>
<td> </td>
<td>
<input type="submit" class="btn btn-default" id="search-button" style="margin-top:-130px;">
</td>
</tr>
</table>
{% if query %}
{% for result in page.object_list %}
<p>
<a href="{{ result.object.get_absolute_url }}">{{ result.object.name }}</a>
</p>
{% empty %}
{% endfor %}
{% if page.has_previous or page.has_next %}
<div>
{% if page.has_previous %}<a href="/category/{{post.category}}">{% endif %}« Previous{% if page.has_previous %}</a>{% endif %}
|
{% if page.has_next %}<a href="/category/{{post.category}}">{% endif %}Next »{% if page.has_next %}</a>{% endif %}
</div>
{% endif %}
{% else %}
{# Show some example queries to run, maybe query syntax, something else? #}
{% endif %}
</form>
</div>
{{hotCat}}
{%endblock%}
这是因为我正在使用干草堆吗?对于其他模板,这很好用......
编辑我的search_indexes.py看起来像
import datetime
from haystack import indexes
from main.models import Category
class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
content_auto = indexes.EdgeNgramField(model_attr='name')
def get_model(self):
return Category
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.all()
我尝试添加搜索功能但没有区别
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^activity/', include('actstream.urls')),
url(r'^select2/', include('django_select2.urls')),
url(r'^ckeditor/', include('ckeditor_uploader.urls')),
url(r'^main/search/',include('haystack.urls')),
url(r'^accounts/(?P<username>[\.\w-]+)/edit/$',views.profile_edit,
name='userena_profile_edit'),
url(r'^accounts/', include('userena.urls')),
url(r'^', include('main.urls')),
]
答案 0 :(得分:1)
您尚未将query
对象传递给您的模板。 haystack示例继承自SearchView
类视图,您已使用基于函数的视图。我猜这是问题所在。
编辑:
这个问题的真正原因是您将urls.py
点/main/search
分到了草堆,因此视图中的search
函数没有被调用。
解决方案是使用类似SearchView
的内容,并将hotCat
值添加到context_dict中。然后将/main/search
指向此视图。
例如:
class OwnSearchView(SearchView):
template='search/search.html',
form_class=SearchForm
def get_context_data(self, *args, **kwargs):
context = super(OwnSearchView, self).get_context_data(*args, **kwargs)
# do something
context['hotCat'] = 'hotCat' #get this however you like
return context
然后在urls.py
url(r'^main/search/', OwnSearchView.as_view(), name='haystack_search'),
)
您需要根据代码添加变量值。 Haystack文档提供了有关form_class
和queryset
。