1

我想限制对 django 通用视图提供的 url 的访问。我已经研究了登录所需的装饰器,但在让它工作方面只取得了部分成功,因为我有一个文档中没有解决的并发症(或者至少我找不到它)。

在添加装饰器之前,在 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 不存在的错误......

任何帮助表示赞赏。

4

1 回答 1

0

与类视图一起使用

从 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"
于 2013-06-27T23:45:06.150 回答