2011-11-09 72 views
2

我是新來的Django ......Django - 如何在我自己的應用程序中使用Django外部應用程序的通用視圖?

我已經安裝了Django的外部應用程序稱爲草堆,這種外部應用程序具有「python2.6的/站點包/草垛」內「views.py」文件。我認爲這個「views.py」在Django術語中被稱爲「通用視圖」。

通用視圖使用「urls.py」像這樣叫:

urlpatterns = patterns('haystack.views', 
        url(r'^search/$', FacetedSearchView(form_class=FacetedSearchForm, searchqueryset=sqs), name='haystack_search'), 
) 

我需要從我的應用程序這個通用視圖進行跳轉。我的問題是如何做到這一點?

的草堆「views.py」的代碼是這樣的:

from django.conf import settings 
from django.core.paginator import Paginator, InvalidPage 
from django.http import Http404 
from django.shortcuts import render_to_response 
from django.template import RequestContext 
from haystack.forms import ModelSearchForm, FacetedSearchForm 
from haystack.query import EmptySearchQuerySet 


RESULTS_PER_PAGE = getattr(settings, 'HAYSTACK_SEARCH_RESULTS_PER_PAGE', 20) 


class SearchView(object): 
    ... 

    def __init__(self, template=None, load_all=True, form_class=None, searchqueryset=None, context_class=RequestContext, results_per_page=None): 
    ... 

    def __call__(self, request): 
    ... 

    def build_form(self, form_kwargs=None): 
    ... 

    def get_query(self): 
    ... 

    def get_results(self): 
    ... 

    def build_page(self): 
    ... 

    def extra_context(self): 
    ... 

    def create_response(self): 
    ... 


def search_view_factory(view_class=SearchView, *args, **kwargs): 
    ... 


class FacetedSearchView(SearchView): 
    ... 

    def __init__(self, *args, **kwargs): 
    ... 

    def build_form(self, form_kwargs=None): 
    ... 

    def extra_context(self): 
    ... 


def basic_search(request, template='search/search.html', load_all=True, form_class=ModelSearchForm, searchqueryset=None, context_class=RequestContext, extra_context=None, results_per_page=None): 
    ... 

能有人給什麼步驟我應該遵循拿出從「urls.py」的代碼,並把這件事情在工作我的「views.py」應用程序?

最好的問候,

+0

只是說明,「views.py」不稱爲通用視圖。 views.py只是一個容器的意見(通用或普通)。通常[通用視圖](https://docs.djangoproject.com/en/1.3/topics/generic-views/)意味着執行一項任務的簡單視圖,並且可以在許多情況下使用。 – Lycha

回答

1

試圖把(r'^search/', include('haystack.urls')),。你也可能需要閱讀 「Getting started with Haystack

嘗試:

#your root urls.py 
from django.conf.urls.defaults import * 
from haystack.forms import FacetedSearchForm 
from haystack.query import SearchQuerySet 
from haystack.views import FacetedSearchView 

sqs = SearchQuerySet().filter(author='john') 

urlpatterns = patterns('haystack.views', 
url(r'^/my_custom_very_special_url$', FacetedSearchView(
    template='my/special/path/to/faceted_search.html', 
    searchqueryset=sqs, 
    form_class=FacetedSearchForm 
), name='haystack_search'), 
) 

順便說一句,這是all in the docs

+0

感謝您的回覆。問題是我需要使用Haystack中的「views.py」中定義的其他模板。有一些方法可以將變量從我的App「views.py」傳遞給模板? –

+0

@Andre,你只需要模板,沒有別的? –

+0

感謝Ivan的回覆,我需要對我的模板進行Faceted搜索,並在URI中調用除「search /」之外的其他名稱。 –

1

您是否按照docs中的所有步驟操作?

使用extra_context方法添加或覆蓋上下文中的其他變量。

+0

謝謝你的回覆Yasel。 –

相關問題