Django ブログサイト views/base.py 汎用ビュー

2020/07/04 (更新:2020/11/19)

汎用のビューと共通のビュー部品です。

リダイレクトビュー

パラメータで指定された画面にリダイレクトします。
メッセージが指定された場合はセッションを使用し遷移先画面に表示します。

redirect_view

def redirect_view(request):
    url = request.GET.get('url')
    if url:
        message = request.GET.get('message')
        if message:
            request.session[constants.SESSION_MESSAGES] = [
                {'level': int(request.GET.get('message_level', messages.INFO)),'message' :_(message)}
            ]
        return redirect(url)
    else:
        logger.error('Parameter Error')
        raise Http404

デフォルトビュー

デフォルト投稿者のブログ初期画面indexにリダイレクトします。

default_view

def default_view(request):
    if hasattr(settings, 'DEFAULT_AUTHOR') and settings.DEFAULT_AUTHOR:
        return redirect('blog:index', settings.DEFAULT_AUTHOR)
    else:
        logger.error('settings.DEFAULT_AUTHOR is not defined.')
        raise Http404

テンプレート拡張共通部品

本部品を各画面に組み込み、投稿者毎に画面をカスタマイズします。
投稿者に拡張テンプレートが指定されている場合、テンプレート名を当該テンプレートに置き換えます。

CommonMixin

class CommonMixin():
    def get_template_names(self):
        template = super().get_template_names()
        self.kwargs['base_template'] = template[0]
        language_codes = common.get_author_language_codes(self.kwargs['author'].id)
        self.kwargs['available_languages'] = utils.get_languages(self.request, language_codes)
        template[0] = utils.get_template_path(self.request, self.kwargs['author_name'], 'extends')
        logger.debug(f'{self.kwargs["base_template"]}:{template[0]}')
        return template