1

django ジェネリック ビューによって提供される URL へのアクセスを制限したいと思います。ログインが必要なデコレータを調査しましたが、ドキュメントで対処されていない複雑な問題があるため (または少なくとも見つけることができなかったので)、機能させるのに部分的な成功しかありませんでした。

デコレータを追加する前に、urls.py には次のものがあります。

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

上記の検索機能は、さまざまな条件に応じて、可能な 4 つの html ページのいずれかをレンダリングするという点で少し複雑です。

デコレータを使用して複数の html ページを処理する方法がドキュメントに表示されず、正しい構文を理解できないようです。

4 つの HTML ページのいずれかでデコレータを使用してみましたが、その 1 つの 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