28 дек. 2009 г.

Снипет для пользовательского контента в шаблонах

Очень простой и, наверняка, не слишком правильный способ вставлять html-хуки в шаблоны, содержимым которых может управлять пользователь:


# models.py:



class Snippet(models.Model):

    id          = models.AutoField(primary_key=True)

    title       = models.CharField(u'название', max_length=50)

    text        = models.TextField(u'текст', max_length=5000)

    template    = models.CharField(u'шаблон',   max_length=250, blank=True, null=True)

    def __unicode__(self): return u'%s (%s)'%(self.title, self.template)

    class Meta:

        verbose_name = u'снипет'

        verbose_name_plural = u'снипеты'



# tampletetags/realtor_tags.py:



@register.simple_tag

def get_snippet(title, **kwargs):

    from realtor.models import Snippet

    try:

        return Snippet.objects.get(title=title).text

    except:

        return u''

get_snippet.is_safe = True



# в шаблонах:



{% load realtor_tags %}



{% get_snippet 'realtor-top-left' %}


2 комментария:

Unknown комментирует...

Для жтого есть portlet-ы (http://bitbucket.org/diefenbach/django-portlets/overview/) и chunk-и (http://bitbucket.org/hakanw/django-better-chunks/overview/). Если я правильно понял задачу, конечно.

Ivan Markeev комментирует...

Спасибо за наводку! Такие приложения я пока не видел. Посмотрю, отпишусь.