Добавить параметры сайта в 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