| 10 | |
| 11 | |
| 12 | class SearchView: |
| 13 | template = "search/search.html" |
| 14 | query = "" |
| 15 | results = EmptySearchQuerySet() |
| 16 | request = None |
| 17 | form = None |
| 18 | results_per_page = RESULTS_PER_PAGE |
| 19 | |
| 20 | def __init__( |
| 21 | self, |
| 22 | template=None, |
| 23 | load_all=True, |
| 24 | form_class=None, |
| 25 | searchqueryset=None, |
| 26 | results_per_page=None, |
| 27 | ): |
| 28 | self.load_all = load_all |
| 29 | self.form_class = form_class |
| 30 | self.searchqueryset = searchqueryset |
| 31 | |
| 32 | if form_class is None: |
| 33 | self.form_class = ModelSearchForm |
| 34 | |
| 35 | if results_per_page is not None: |
| 36 | self.results_per_page = results_per_page |
| 37 | |
| 38 | if template: |
| 39 | self.template = template |
| 40 | |
| 41 | def __call__(self, request): |
| 42 | """ |
| 43 | Generates the actual response to the search. |
| 44 | |
| 45 | Relies on internal, overridable methods to construct the response. |
| 46 | """ |
| 47 | self.request = request |
| 48 | |
| 49 | self.form = self.build_form() |
| 50 | self.query = self.get_query() |
| 51 | self.results = self.get_results() |
| 52 | |
| 53 | return self.create_response() |
| 54 | |
| 55 | def build_form(self, form_kwargs=None): |
| 56 | """ |
| 57 | Instantiates the form the class should use to process the search query. |
| 58 | """ |
| 59 | data = None |
| 60 | kwargs = {"load_all": self.load_all} |
| 61 | if form_kwargs: |
| 62 | kwargs.update(form_kwargs) |
| 63 | |
| 64 | if len(self.request.GET): |
| 65 | data = self.request.GET |
| 66 | |
| 67 | if self.searchqueryset is not None: |
| 68 | kwargs["searchqueryset"] = self.searchqueryset |
| 69 |
searching dependent graphs…