シメオンの答えと、クラスのメソッド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'),
)