登录需要的装饰器,其中有许多可能的HTML用于相同的URL

时间:2013-06-27 16:42:21

标签: python django login-required

我想限制访问由django通用视图提供服务的网址。我已经研究了登录所需的装饰器,但是只有部分成功才能使它工作,因为我有一个未在文档中解决的复杂功能(或者至少我找不到它)。

在添加装饰器之前,在urls.py中我有以下内容:

url(r'^search/(?P<search_type>\w+)', search)

上面提到的搜索功能稍微复杂一点,根据不同的条件,它将呈现四个可能的html页面之一。

我没有在文档中看到使用装饰器处理多个html页面的方法,我似乎无法弄清楚正确的语法。

我尝试将装饰器与四个html页面中的一个一起使用,它确实适用于那个html页面:

from django.views.generic import TemplateView

url(r'^search/(?P<search_type>\w+)',
    login_required(TemplateView.as_view(template_name='search_form.html',), search)),

但是我如何要求登录所有可能的html?例如,我尝试过这样的事情:

 url(r'^search/(?P<search_type>\w+)',
    login_required(TemplateView.as_view(template_name='search_form.html',), TemplateView.as_view(template_name='search_form_manual.html',), search)),

我还尝试了子类化通用视图:

//在view.py

from django.views.generic import TemplateView

class AboutView(TemplateView):
template_name_1 = "search_form.html"
template_name_2 = "search_form_manual.html"
template_name_3 = "search_results.html"
template_name_4 = "tag_search_results.html"

//在urls.py中

from views import AboutView

url(r'^search/(?P<search_type>\w+)',
    login_required(AboutView.as_view(template_name_1, template_name_2,), search)),

但是我得到的错误是template_name_1和template_name_2不存在......

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在课堂视图中使用that

来自django.views.generic导入TemplateView

class AboutView(TemplateView):

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(ProtectedView, self).dispatch(*args, **kwargs)

    template_name_1 = "search_form.html"
    template_name_2 = "search_form_manual.html"
    template_name_3 = "search_results.html"
    template_name_4 = "tag_search_results.html"