Добавить параметры сайта в 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 из 5 (всего 0 оценок)

captcha
Отмеченные звёздочкой поля ( * ) являются обязательными для заполнения.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Артём Мальцев

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

Права на использование материала, расположенного на этой странице https://vivazzi.pro/ru/it/add-site-parameters/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Артём Мальцев
Ссылка на статью: <a href="https://vivazzi.pro/ru/it/add-site-parameters/">https://vivazzi.pro/ru/it/add-site-parameters/</a>

Больше: Правила использования сайта

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

Комментарии: 0

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц