Я пытаюсь отобразить таблицу значений html с примерно 20 столбцами, где говорят, что пользователи-сотрудники видят один поднабор столбцов, а пользователи, не являющиеся сотрудниками, видят другое подмножество столбцов. Возможно, я захочу позже определить другие типы пользователей. Теперь прямо сейчас у меня есть три статические строки заголовка, так что шаблон выглядитОпределить переменные в шаблоне на основе штата пользователей или нет
<table>
<tr>
<th>Col A</th>
{% if user.is_staff %}<th>Col B</th>{% endif %}
...
{% if not user.is_staff %}<th>Col K</th>{% endif %}
</tr>
<tr>
<td>Col A second header</td>
{% if user.is_staff %}<td>Col B second header</td>{% endif %}
...
{% if not user.is_staff %}<td>Col K second header</td>{% endif %}</tr>
<tr><td>Col A third header</td> ... </tr>
{% for obj in object_list %}
<tr>
<td>{{ obj.col_a }}</td>
{% if user.is_staff %}<td>{{ obj.col_b }}</td>{% endif %}
...
{% if not user.is_staff %}<td>{{ obj.col_k }}</td>{% endif %}
</tr>
{% endfor %}</table>
Однако, я считаю, не-DRY, как каждый раз, если я хочу изменить, если тип пользователь может видеть колонку, я должен измените его на 4 места. Или, если я хочу определить несколько разных классов пользователей, мне придется иметь сложные операторы if. Я предпочел бы что-то вроде
{% if show_col_a %}<td>{{obj.col_a }}</td>{{% endif %}
Где я могу определить в верхней части шаблона (или, возможно, в представлении), что user.is_staff можно увидеть show_col_a. Что-то вроде этого возможно? Я использую общий вид (object_list). Может быть, изменить всех пользователей, чтобы иметь атрибуты user.show_col_a как-то и делать {% if user.show_col_a%}? Я не уверен, как добавить логические атрибуты для пользователей.
EDIT: Может потребоваться несколько пользователей с пользовательскими представлениями (например, staff_view; admin_view, непривилегированные и т. Д.), Поэтому, если утверждения будут неудобными. Содержимое ячейки обычно сложнее, чем {{obj.col_b}}; попробовал упростить задачу, чтобы добраться до точки. Например:
<td>{% if obj.custom_address %}
{{ obj.custom_address.webprint|safe }}
{% else %}
{{ obj.business.address.webprint|safe }}
{% endif %}</td>
Также в то время как несколько шаблонов будет работать с простым переключателем, как: {%, если user.is_staff%} {% включают "template_staff.html" %} {% еще%} {%, если user.is_admin%} {% включают "template_admin.html" %} {% еще%} {% включают "template_other.html" %} { % ENDIF%} { % ENDIF%}
I не находите его НЕ СУХОЙ; например, каждое редактирование шаблона должно быть реплицировано в три шаблона. Думаю, я мог бы создать скрипт, который читает, генерирует три шаблона из некоторого super_template за пределами django, но его становится очень неэлегантным.
Предпочитают не иметь шаблона для каждого пользовательского класса (который может распространяться на несколько классов пользователей позже, будет трудно поддерживать). Скорее всего, есть словарь привилегий, связанных с пользователями или пользователями группы. Я вижу, как я могу изменить ваш IsStaffNode.render, чтобы изменить return «