mirror of
https://github.com/jazzband/django-dbtemplates.git
synced 2026-03-17 06:30:29 +00:00
start of refactoring as a standalone application
git-svn-id: https://django-dbtemplates.googlecode.com/svn/trunk@9 cfb8ba98-e953-0410-9cff-959ffddf5974 committer: leidel <leidel@cfb8ba98-e953-0410-9cff-959ffddf5974> --HG-- extra : convert_revision : aa5badb83ef1c6f30681f6f240eebc5e98354797
This commit is contained in:
parent
7c5c4b3b4c
commit
d342d8ff75
7 changed files with 29 additions and 143 deletions
|
|
@ -1,28 +0,0 @@
|
|||
Copyright (c) 2007, Jannis Leidel
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
* Neither the name of the author nor the names of other
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
Database template loader for Django
|
||||
===================================
|
||||
|
||||
This is a basic database template loader for Django which uses a m2m
|
||||
relationship to provide a site centric template loading.
|
||||
|
||||
How to use it in your own django application
|
||||
============================================
|
||||
|
||||
0. Get the source from the subversion repository
|
||||
1. Copy the "template" directory to your django project directory
|
||||
2. Edit your settings.py:
|
||||
|
||||
# Add ``myapp.template`` to the ``INSTALLED_APPS`` where "myapp" is the
|
||||
name of your django project
|
||||
|
||||
# Check if ``django.contrib.sites`` and ``django.contrib.admin`` are in
|
||||
``INSTALLED_APPS`` and add if necessary
|
||||
|
||||
It should look something like this:
|
||||
|
||||
INSTALLED_APPS = (
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.sites',
|
||||
'django.contrib.admin',
|
||||
'django.contrib.flatpages',
|
||||
'myapp.blog',
|
||||
'myapp.template',
|
||||
)
|
||||
|
||||
# Add ``myapp.template.loaders.database.load_template_source`` to the
|
||||
``TEMPLATE_LOADERS`` where "myapp" is the name of your Django project
|
||||
|
||||
It should look something like this:
|
||||
|
||||
TEMPLATE_LOADERS = (
|
||||
'django.template.loaders.filesystem.load_template_source',
|
||||
'django.template.loaders.app_directories.load_template_source',
|
||||
'myapp.template.loaders.database.load_template_source',
|
||||
)
|
||||
|
||||
3. Sync your database via shell (hint: "./manage.py syncdb" within project dir)
|
||||
4. Restart your Django server
|
||||
5. Go to the admin interface and add templates by filling the ``name`` field
|
||||
with filename like identifiers, for example "blog/entry_list.html"
|
||||
6. Use it with ``Flatpages``, ``Generic views`` and your own custom views
|
||||
|
||||
What? Hm, doesn't work here. || Aaah nice, BUT...
|
||||
=================================================
|
||||
|
||||
Please leave your questions and messages on the designated Google Code site:
|
||||
|
||||
http://code.google.com/p/django-databasetemplateloader/
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
from django.template import TemplateDoesNotExist
|
||||
from django.contrib.sites.models import Site
|
||||
from django.conf import settings
|
||||
from template.models import Template
|
||||
|
||||
try:
|
||||
site = Site.objects.get_current()
|
||||
except:
|
||||
site = None
|
||||
|
||||
def load_template_source(template_name, template_dirs=None):
|
||||
"""
|
||||
Loader which fetches the template content from the database depending on
|
||||
the current ``Site``.
|
||||
"""
|
||||
if site is not None:
|
||||
try:
|
||||
t = Template.objects.get(name__exact=template_name, sites__pk=site.id)
|
||||
return (t.content, 'db:%s:%s' % (settings.DATABASE_ENGINE, template_name))
|
||||
except:
|
||||
pass
|
||||
raise TemplateDoesNotExist, template_name
|
||||
load_template_source.is_usable = True
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
"""
|
||||
Creates the default database template objects.
|
||||
Don't know if it works.
|
||||
"""
|
||||
|
||||
from django.dispatch import dispatcher
|
||||
from django.db.models import signals
|
||||
from django.contrib.sites.models import Site
|
||||
|
||||
from template.models import Template
|
||||
from template import models as template_app
|
||||
|
||||
def create_default_templates(app, created_models, verbosity):
|
||||
try:
|
||||
site = Site.objects.get_current()
|
||||
except Site.DoesNotExist:
|
||||
site = None
|
||||
|
||||
if site is not None:
|
||||
if Template in created_models:
|
||||
if verbosity >= 2:
|
||||
print "Creating example database templates for error 404 and error 500"
|
||||
|
||||
template404 = Template(name="404.html",content="""
|
||||
{% load i18n %}<h2>{% trans 'Page not found' %}</h2>
|
||||
<p>{% trans "We're sorry, but the requested page could not be found." %}</p>""")
|
||||
template404.save()
|
||||
template404.sites.add(site)
|
||||
|
||||
template500 = Template(name="500.html",content="""{% load i18n %}
|
||||
<h1>{% trans 'Server Error <em>(500)</em>' %}</h1>
|
||||
<p>{% trans "There's been an error." %}</p>""")
|
||||
template500.save()
|
||||
template500.sites.add(site)
|
||||
|
||||
dispatcher.connect(create_default_templates, sender=template_app, signal=signals.post_syncdb)
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from django.db import models
|
||||
from django.template import loader, Context
|
||||
from django.core import validators
|
||||
from django.contrib.sites.models import Site
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
|
@ -25,4 +27,30 @@ class Template(models.Model):
|
|||
search_fields = ('name','content')
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
return self.name
|
||||
|
||||
__test__ = {'API_TESTS':"""
|
||||
>>> test_site = Site.objects.get(pk=1)
|
||||
>>> test_site
|
||||
<Site: example.com>
|
||||
>>> t1 = Template(name='base.html', content="<html><head></head><body>{% block content %}Welcome at {{ title }}{% endblock %}</body></html>")
|
||||
>>> t1.save()
|
||||
>>> t1.sites.add(test_site)
|
||||
>>> t1
|
||||
<Template: base.html>
|
||||
>>> t2 = Template(name='sub.html', content='{% extends "base.html" %}{% block content %}This is {{ title }}{% endblock %}')
|
||||
>>> t2.save()
|
||||
>>> t2.sites.add(test_site)
|
||||
>>> t2
|
||||
<Template: sub.html>
|
||||
>>> Template.objects.filter(sites=test_site)
|
||||
[<Template: base.html>, <Template: sub.html>]
|
||||
>>> t2.sites.all()
|
||||
[<Site: example.com>]
|
||||
>>> from django.contrib.dbtemplates.loader import load_template_source
|
||||
>>> loader.template_source_loaders = [load_template_source]
|
||||
>>> loader.get_template("base.html").render(Context({'title':'MainPage'}))
|
||||
'<html><head></head><body>Welcome at MainPage</body></html>'
|
||||
>>> loader.get_template("sub.html").render(Context({'title':'SubPage'}))
|
||||
'<html><head></head><body>This is SubPage</body></html>'
|
||||
"""}
|
||||
Loading…
Reference in a new issue