This package provides multilingual search indexes for easy Haystack integration with django CMS.
After installing django-cms-search through your package manager of choice, add cms_search to your INSTALLED_APPS. That’s it.
For setting up Haystack, please refer to their documentation.
django-cms-search provides a couple of useful helpers to deal with multilingual content.
A SearchIndex that dynamically adds translated fields to the search index. An example for when this is useful is the app hook infrastructure from django CMS. When a model’s get_absolute_url() uses a url pattern that is attached to an app hook, the URL varies depending on the language. A usage example:
from haystack import indexes
from cms_search.search_helpers.indexes import MultiLanguageIndex
class NewsIndex(MultiLanguageIndex):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr='title')
url = indexes.CharField(stored=True)
def prepare_url(self, obj):
return obj.get_absolute_url()
class HaystackTrans:
fields = ('url', 'title')
Note
Note
django CMS monkeypatches django.core.urlresolvers.reverse() to enable language namespaces. To ensure that this monkeypatching happens before haystack autodiscovers your indexes, your search_sites.py should look somewhat like this:
from cms.models import monkeypatch_reverse
import haystack
monkeypatch_reverse()
haystack.autodiscover()
This template tag is most useful in combination with the MultiLanguageIndex. You can use it while looping through search results, and it will automatically pick up the translated field for the current language or fall back to another available language (in the order defined in LANGUAGES). Example:
{% load cms_search_tags %}
<ul class="search-results">
{% for result in page.object_list %}
<li><a href="{% get_translated_value result "url" %}">{% get_translated_value result "title" %}</a></li>
{% endfor %}
</ul>
Note
If you plan to use this template tag, you have to add cms_search.search_helpers to your INSTALLED_APPS.
Default: haystack.indexes.SearchIndex
This setting can be used to add custom fields to the search index if the included fields do not suffice. Make sure to provide the full path to your SearchIndex subclass.