将额外的上下文传递给Django Haystack模板

Ran*_* Ma 2 django get django-forms django-haystack

使用Django Haystack设置搜索页面需要输入他们的URLconf片段url(r'^search/', include('haystack.urls')).但是,这意味着(至少从我对Django/MVC的基本理解),没有简单的方法来传递额外的上下文(即额外的字典键/值)来呈现到页面上.

特别是,我想自定义一个搜索字段来镜像从GET请求传递到页面的变量:

<form method="get" action=".">
<input type="text" name="q" value="">
<!-- result html here -->
</form>
Run Code Online (Sandbox Code Playgroud)

假设参数?q=twitter作为GET请求的一部分附加到URL; 我想让value选择器等于twitter.如果我控制了视图,我可能会这样做:

if request.method == 'GET':
    q = request.GET['q']
    return render(request, 'template.html', {'q': q})
Run Code Online (Sandbox Code Playgroud)

然后将其q用作valueHTML中选择器的值<input>.

除了编辑Haystack源之外,有没有办法以简单的方式完成这个任务?

shr*_*ans 9

您可以将Haystack视图子类化以添加到上下文中:

views.py在您的搜索应用中创建一个文件(如果您没有).然后确保导入Haystack视图.然后你可以像这样创建一个子类:

import haystack.views

class SearchView(haystack.views.SearchView):
    """
    We subclass the base haystack view in order to add context.
    """

    def extra_context(self):
        return {
            'yourValue': yourValue,
        }
Run Code Online (Sandbox Code Playgroud)

不要忘记urls.py在搜索应用中更改您的视图路径:

from yourSite.apps.search.views import SearchView
Run Code Online (Sandbox Code Playgroud)