1

したがって、一般的な干し草の山 URL に設定されたテンプレートがあります。

url(r'^$', search_view_factory(
    view_class=SearchView,
    template='base.html',
    searchqueryset=sqs,
    form_class=ModelSearchForm
), name='haystack_search'),

のようなものをドロップする必要がありtasks.filter(completed=False).order_by('priority', 'dueDate')ます。

テンプレートでは、 でタスクにアクセスできますがuser.get_profile.task_set.all、フィルタリングと順序付けは実行できません。

これはビュー エントリを介して簡単に解決できますが、干し草の山はビューを指していないため、フィルター処理および順序付けされたリストをテンプレートに渡すにはどうすればよいでしょうか?

フィルタリングされた順序付けられたリストは、干し草の山の検索機能とは何の関係もないことに言及する必要があります。

4

2 に答える 2

1

を使用する代わりにSearchView、サブクラスを作成してメソッドを定義しますextra_context

class MySearchView(SearchView):

    def extra_context(self):
        return { 'ordered_tasks': ... }

このメソッドは、追加のコンテキスト変数を含む辞書を返す必要があります。

view_class最後に、の呼び出しでこの新しいビュークラスをに渡しsearch_view_factoryます。

于 2013-02-05T13:08:14.180 に答える
0

シメオンの答えと、クラスのメソッドself.request.user内で使用する可能性を認識させてくれた他のスタックオーバーフローの質問のおかげで、私は自分の問題を解決することができました。 内部:def extra_context(self):CustomSearchView(SearchView)
views.py

from haystack.views import SearchView
class MySearchView(SearchView):    

    def extra_context(self):
        if self.request.user.is_authenticated:
            member = self.request.user.get_profile()
        else:
            # just fooling the haystack config, since this view is set to localhost
            return { 'x' : 0 }  # which would be equivalent to a direct_to_template view


        # getting member tasks
        tasks = list()
        for elem in member.task_set.all().filter(completed=False).order_by('priority', 'dueDate')[:5]:
            tasks.append(elem)

        return { 'tasks': tasks }

そしてタンプレートで:

<a href="tasks/" style="color: #ffffff">Tasks</a>
    <ul id="tasksPane">
        {% for task in tasks %}
            <li><a href="/tasks/{{ task.id }}" id="tasksP" {% if task.priority == 'c' %} style="color: #99ff44" {% endif %}
                                                            {% if task.priority == 'b' %} style="color: #024dac" {% endif %}
                                                            {% if task.priority == 'a' %} style="color: #aa0022" {% endif %}
                ><input type="checkbox" name="task" value="completed">{{ task.task }}</a></li>
        {% endfor %}
    </ul>

このように、私が必要としていたテンプレートで主要なロジックを実行する必要はありませんfilter。また、テンプレートでandorder_byメソッドを許可しないため、django はそのようなアプローチを承認しないと考えています。
そしてもちろん、私の中でurls.py

# haystack
from haystack.forms import ModelSearchForm
from haystack.query import SearchQuerySet
from haystack.views import SearchView, search_view_factory
sqs = SearchQuerySet()
from member.views import MySearchView

urlpatterns = patterns('',
    url(r'^$', search_view_factory(
        view_class=MySearchView,
        template='base.html',
        searchqueryset=sqs,
        form_class=ModelSearchForm
    ), name='haystack_search'),
)
于 2013-02-07T04:15:33.410 に答える