Добавить параметры сайта в Django и использование их в шаблонах
13 ноября 2016 г. 12:54
Простая реализация добавления своих параметров в Django. Это полезно, например, если вы хотите на время закрыть какой-то раздел, но оставить открытым для суперпользователей.
# models.py # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models class SiteParameter(models.Model): parameter = models.CharField('Параметр', max_length=255) value = models.CharField('Значение', max_length=255) description = models.TextField('Описание параметра', blank=True) def __unicode__(self): return self.parameter class Meta: verbose_name = 'Параметр сайта' verbose_name_plural = 'Параметры сайта'
# admin.py # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.contrib import admin from sb_utils.models import SiteParameter @admin.register(SiteParameter) class SiteParameterAdmin(admin.ModelAdmin): search_fields = ('parameter', 'value', 'description') list_display = ('parameter', 'value', 'description') fieldsets = ( (None, { 'fields': ('parameter', 'value', 'description') }), ) def get_readonly_fields(self, request, obj=None): if request.user.is_superuser: return super(SiteParameterAdmin, self).get_readonly_fields(request, obj) else: return 'parameter', 'description'
# templatetags/main_tags.py # -*- coding: utf-8 -*- from __future__ import unicode_literals from django import template from django.contrib.auth.models import User from django.core.mail import mail_admins from django.core.urlresolvers import reverse from my_utils.models import SiteParameter register = template.Library() @register.assignment_tag def get_parameter(site_parameter): try: site_parameter = SiteParameter.objects.get(parameter=site_parameter) return site_parameter.value except SiteParameter.DoesNotExist: url = '{}{}'.format(settings.DOMAIN, reverse(u'admin:my_utils_siteparameter_changelist')) msg = ('Ошибка! Невозможно узнать параметр сайта, так как в списке "Параметры сайта" не найден объект "{}"\n' 'Пожалуйста, перейдите по ссылке {}, чтобы добавить данный объект'.format(site_parameter, url)) mail_admins('[Your_site] Ошибка сайта', msg) return ''
Теперь в шаблоне можно сделать так:
# templates/my_html_file.html {% get_parameter 'Отображать онлайн-заявки' as show_online_order %} {% if show_online_order == 'Да' or request.user.is_authenticated %} .. some html code .. {% else %} К сожалению, страница находится в разработке... {% endif %}
Конечно, можно и на уровне представлений определять, какой шаблон показывать. Дело вкуса.
Похожие статьи:
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 0