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