adding prototype cms app with pages and menu
This commit is contained in:
parent
0f6843b08d
commit
d0be075c89
9 changed files with 142 additions and 0 deletions
symposion_project
0
symposion_project/apps/cms/__init__.py
Normal file
0
symposion_project/apps/cms/__init__.py
Normal file
19
symposion_project/apps/cms/admin.py
Normal file
19
symposion_project/apps/cms/admin.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
from django.contrib import admin
|
||||
|
||||
from mptt.admin import MPTTModelAdmin
|
||||
|
||||
from cms.models import MenuItem, Page
|
||||
|
||||
|
||||
class PageAdmin(MPTTModelAdmin):
|
||||
prepopulated_fields = {"slug": ("title",)}
|
||||
list_display = ("title", "published", "status")
|
||||
|
||||
admin.site.register(Page, PageAdmin)
|
||||
|
||||
|
||||
class MenuItemAdmin(MPTTModelAdmin):
|
||||
prepopulated_fields = {"slug": ("name",)}
|
||||
list_display = ("name", "login_required", "published",)
|
||||
|
||||
admin.site.register(MenuItem, MenuItemAdmin)
|
10
symposion_project/apps/cms/context_processors.py
Normal file
10
symposion_project/apps/cms/context_processors.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
from cms.models import MenuItem
|
||||
|
||||
|
||||
def menuitems(request):
|
||||
qs = MenuItem.objects.filter(published=True)
|
||||
if not request.user.is_authenticated():
|
||||
qs = qs.filter(login_required=False)
|
||||
return {
|
||||
"menuitems": qs,
|
||||
}
|
81
symposion_project/apps/cms/models.py
Normal file
81
symposion_project/apps/cms/models.py
Normal file
|
@ -0,0 +1,81 @@
|
|||
from datetime import datetime
|
||||
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from markitup.fields import MarkupField
|
||||
|
||||
from taggit.managers import TaggableManager
|
||||
|
||||
from mptt.models import MPTTModel, TreeForeignKey
|
||||
from mptt.utils import drilldown_tree_for_node
|
||||
|
||||
|
||||
class ContentBase(models.Model):
|
||||
|
||||
STATUS_CHOICES = (
|
||||
(1, _("Draft")),
|
||||
(2, _("Public")),
|
||||
)
|
||||
|
||||
title = models.CharField(max_length=100)
|
||||
slug = models.CharField(max_length=100, blank=True, null=True)
|
||||
body = MarkupField()
|
||||
|
||||
tags = TaggableManager(blank=True)
|
||||
|
||||
status = models.IntegerField(choices=STATUS_CHOICES, default=2)
|
||||
published = models.DateTimeField(default=datetime.now)
|
||||
created = models.DateTimeField(editable=False, default=datetime.now)
|
||||
updated = models.DateTimeField(editable=False, default=datetime.now)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
class Page(MPTTModel, ContentBase):
|
||||
|
||||
parent = TreeForeignKey("self", null=True, blank=True, related_name="children")
|
||||
ordering = models.PositiveIntegerField(default=1)
|
||||
path = models.TextField(blank=True, editable=False)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.title
|
||||
|
||||
def save(self, calculate_path=True, *args, **kwargs):
|
||||
super(Page, self).save(*args, **kwargs)
|
||||
if calculate_path:
|
||||
self.calculate_path()
|
||||
|
||||
def calculate_path(self):
|
||||
self.path = ""
|
||||
for page in drilldown_tree_for_node(self):
|
||||
if page == self:
|
||||
self.path += page.slug
|
||||
break
|
||||
else:
|
||||
self.path += "%s/" % page.slug
|
||||
self.save(calculate_path=False)
|
||||
|
||||
class MPTTMeta:
|
||||
order_insertion_by = ["title"]
|
||||
|
||||
|
||||
class MenuItem(MPTTModel):
|
||||
|
||||
name = models.CharField(max_length=50, unique=True)
|
||||
slug = models.SlugField()
|
||||
parent = TreeForeignKey("self", null=True, blank=True, related_name="children")
|
||||
|
||||
url = models.CharField(max_length=200)
|
||||
#FIELDNAME = models.ForeignKey()
|
||||
|
||||
published = models.BooleanField(default=True)
|
||||
login_required = models.BooleanField(default=False)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class MPTTMeta:
|
||||
order_insertion_by = ["name"]
|
13
symposion_project/apps/cms/views.py
Normal file
13
symposion_project/apps/cms/views.py
Normal file
|
@ -0,0 +1,13 @@
|
|||
from django.shortcuts import render_to_response
|
||||
from django.template import RequestContext
|
||||
|
||||
from cms.models import Page
|
||||
|
||||
|
||||
def page(request, slug):
|
||||
|
||||
page = Page.objects.get(path=slug)
|
||||
|
||||
return render_to_response("cms/page_detail.html", {
|
||||
"page": page,
|
||||
}, context_instance=RequestContext(request))
|
|
@ -23,3 +23,7 @@ python-openid==2.2.5
|
|||
metron==0.1
|
||||
|
||||
pinax-theme-bootstrap==0.1.5
|
||||
django-taggit==0.9.3
|
||||
django-reversion==1.5.1
|
||||
django-markitup==1.0.0
|
||||
markdown==2.1.1
|
||||
|
|
|
@ -157,6 +157,10 @@ INSTALLED_APPS = [
|
|||
"timezones",
|
||||
"emailconfirmation",
|
||||
"metron",
|
||||
"markitup",
|
||||
"taggit",
|
||||
"cms",
|
||||
"mptt",
|
||||
|
||||
# Pinax
|
||||
"pinax.apps.account",
|
||||
|
@ -196,6 +200,8 @@ DEBUG_TOOLBAR_CONFIG = {
|
|||
"INTERCEPT_REDIRECTS": False,
|
||||
}
|
||||
|
||||
MARKITUP_FILTER = ("markdown.markdown", {"safe_mode": True})
|
||||
|
||||
# local_settings.py can be used to override environment-specific settings
|
||||
# like database and email that differ between development and production.
|
||||
try:
|
||||
|
|
6
symposion_project/templates/cms/page_detail.html
Normal file
6
symposion_project/templates/cms/page_detail.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% block body %}
|
||||
<h1>{{ page.title }}</h1>
|
||||
{{ page.body }}
|
||||
{% endblock %}
|
|
@ -10,6 +10,7 @@ from pinax.apps.account.openid_consumer import PinaxConsumer
|
|||
|
||||
handler500 = "pinax.views.server_error"
|
||||
|
||||
WIKI_SLUG = r"(([\w-]{2,})(/[\w-]{2,})*)"
|
||||
|
||||
urlpatterns = patterns("",
|
||||
url(r"^$", direct_to_template, {
|
||||
|
@ -20,6 +21,8 @@ urlpatterns = patterns("",
|
|||
url(r"^about/", include("about.urls")),
|
||||
url(r"^account/", include("pinax.apps.account.urls")),
|
||||
url(r"^openid/", include(PinaxConsumer().urls)),
|
||||
url(r"^markitup/", include("markitup.urls")),
|
||||
url(r"^pages/(?P<slug>%s)/$" % WIKI_SLUG, "cms.views.page", name="cms_page"),
|
||||
)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue