我想限制访问由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不存在......
感谢任何帮助。
答案 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"