所以,我已经在这里和其他地方读过,我看到人们加载不同的html模板,或者在模板中做一些事情来改变显示的内容,但我想要做的是加载不同的视图或基于用户个人资料中的元素形成。
我的urls.py看起来像这样:
urlpatterns = patterns('',
url(r'^$', MySearchView(
searchqueryset=sqs,
form_class=BasicPropertySearchForm
), name="haystack_search"),
)
我可以设置行
form_class=
手动到BasicPropertySearchForm或PaidPropertySearchForm,相应的搜索页面将正确加载并运行,没问题。
但我想做的是自动生成form_class,以便根据用户个人资料加载BasicPropertySearchForm或PaidPropertySearchForm。
我尝试在视图中使用request.user.get_profile()完成此操作:
class MySearchView(SearchView):
#extends the default haystack SearchView
def which_view(self):
if self.request.user.get_profile().is_paid:
return PaidPropertySearchForm
else:
return BasicPropertySearchForm
并改变
form_class=MySearchView().which_view
但是会导致错误
which_view() takes exactly 1 argument (4 given)
我尝试了很多其他变体,包括使用一个不在views.py类中的方法,在urls.py中执行if语句(由于我想象我必须访问request.user.get_profile()来自视图)...
我也试过这样做:
urls.py:
urlpatterns = patterns('',
url(r'^$', 'property_listings.views.search_views', name="haystack_search"),
)
和views.py:
def search_views(request, *args, **kwargs):
sqs = SearchQuerySet().all
if request.user.get_profile().is_paid:
return SearchView(
searchqueryset=sqs,
form_class=PaidPropertySearchForm
)(request, *args, **kwargs)
else:
return SearchView(
searchqueryset=sqs,
form_class=BasicPropertySearchForm
)(request, *args, **kwargs)
然后我的表单给了我关于未定义的东西的各种错误,例如self.searchqueryset.all(),对于那个或其他东西都不存在..
任何帮助将不胜感激,我必须在过去几天阅读50个不同的博客,文档页面,堆栈溢出帖子等等,我在这里碰到了一堵墙。