Найти - Пользователи
Полная версия: Убрать повторяющийся код проверки авторизации.
Начало » Django » Убрать повторяющийся код проверки авторизации.
1
Kotakota
Для проекта есть одна главная шаблонная страница *.html
В зависимости от состояния пользователя (авторизирован/неавторизирован) должны выводиться соответствующие элементы в шаблоне.
Такие проверок на авторизацию в этом шаблоне достаточно много:
{% if user.is_authenticated %}
Привет {{ user.username }}<br />
<a href="{% url acct_logout %}">Выход</a>
{% else %}
{% include "login_template.html" %}
{% endif %}
Или еще:

 {% if user.is_authenticated %}
Загрузите свое изображение:<br />
{% include "upload_picture_template.html" %}
<br />
{% else %}
Авторизируйтесь, что бы иметь возможность добавлять рисунки.
{% endif %}
Как можно убрать повторяющийся код, чтобы следовать DRY?
Решил использовать включающие теги:
from django import template
register = template.Library()
@register.inclusion_tag('mini_template.html', takes_context=True)
def my_tag(context,what):
return {'whats': what}
Но не совсем понимаю, что включить в него?
Есть идея что то типа этого:
{% load some_tags %}
# Вызываем включающий тег в тех местах где это нужно и передаем ему параметры
{% my_tag 'some_template_file.html' %}
Включающий тег будет проверять авторизирован пользователь или нет и если пользователь авторизирован, то будет инклюдить шаблон переданный в параметре (инклюд будет в файле mini_template.html, с помощью {% include {{ whats }} %}.
Ferroman
Множественное использование if user.is_authenticated не нарушает DRY-принцып. В крайнем случае, можно просто использовать два разых шблона, для разных пользователей, и отнаследовать их от общего.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB