diff --git a/demo/models.py b/demo/models.py
new file mode 100644
index 0000000..86485f2
--- /dev/null
+++ b/demo/models.py
@@ -0,0 +1,10 @@
+from django.db import models
+
+from django.contrib.sessions.models import Session
+
+
+class Task(models.Model):
+
+ session = models.ForeignKey(Session)
+ label = models.CharField(max_length=100)
+ done = models.BooleanField(default=False)
diff --git a/demo/settings.py b/demo/settings.py
index 3e33261..56e66d0 100644
--- a/demo/settings.py
+++ b/demo/settings.py
@@ -136,6 +136,7 @@ INSTALLED_APPS = [
"metron",
# project
+ "demo"
]
# A sample logging configuration. The only tangible logging
@@ -173,7 +174,7 @@ FIXTURE_DIRS = [
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
-ACCOUNT_OPEN_SIGNUP = True
+ACCOUNT_OPEN_SIGNUP = False
ACCOUNT_USE_OPENID = False
ACCOUNT_REQUIRED_EMAIL = False
ACCOUNT_EMAIL_VERIFICATION = False
diff --git a/demo/templates/_complete_count.html b/demo/templates/_complete_count.html
new file mode 100644
index 0000000..c005415
--- /dev/null
+++ b/demo/templates/_complete_count.html
@@ -0,0 +1,3 @@
+
+
{{ done_count }} task{{ done_count|pluralize }} completed
+
\ No newline at end of file
diff --git a/demo/templates/_task.html b/demo/templates/_task.html
new file mode 100644
index 0000000..b370e5f
--- /dev/null
+++ b/demo/templates/_task.html
@@ -0,0 +1,17 @@
+
+ |
+
+ |
+
+ {{ task.label }}
+ |
+
\ No newline at end of file
diff --git a/demo/templates/homepage.html b/demo/templates/homepage.html
index 86fa069..2dcf937 100644
--- a/demo/templates/homepage.html
+++ b/demo/templates/homepage.html
@@ -1,4 +1,4 @@
-{% extends "banner_base.html" %}
+{% extends "site_base.html" %}
{% load i18n %}
@@ -6,34 +6,30 @@
{% block body_class %}home{% endblock %}
-{% block banner %}
- {% trans "Welcome to Pinax" %}
-
- {% blocktrans %}
- Pinax is a Django
- project intended to provide a starting point for websites. By
- integrating numerous reusable Django apps to take care of the
- things that many sites have in common, it lets you focus on what
- makes your site different.
- {% endblocktrans %}
-
-
- About Account Project
-
- {% blocktrans %}
- In addition to what is provided by the "zero" project, this project
- provides thorough integration with django-user-accounts, adding
- comprehensive account management functionality. It is a foundation
- suitable for most sites that have user accounts.
- {% endblocktrans %}
-
-
- {% if user.is_authenticated %}
- {% url what_next as what_next_url %}
- {% blocktrans %}Wondering What Next?{% endblocktrans %}
- {% else %}
- {% url account_login as login_url %}
- {% url account_signup as signup_url %}
- {% blocktrans %}You can Log In or Sign Up to try out the site.{% endblocktrans %}
- {% endif %}
+{% block body %}
+
+
+
+
Tasks
+
+ A sample tasks app to demonstrate how to use
+
+ bootstrap-ajax
+
+
+
+ {% include "_complete_count.html" %}
+
+ {% for task in tasks %}
+ {% include "_task.html" %}
+ {% endfor %}
+
+
+
+
{% endblock %}
diff --git a/demo/templates/site_base.html b/demo/templates/site_base.html
index e3e80a0..c84f0fb 100644
--- a/demo/templates/site_base.html
+++ b/demo/templates/site_base.html
@@ -12,6 +12,7 @@
{% endblock %}
{% block extra_body_base %}
+
{% analytics %}
{% block extra_body %}{% endblock %}
{% endblock %}
diff --git a/demo/urls.py b/demo/urls.py
index 1023d46..12f99a3 100644
--- a/demo/urls.py
+++ b/demo/urls.py
@@ -2,16 +2,19 @@ from django.conf import settings
from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
-from django.views.generic.simple import direct_to_template
-
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns("",
- url(r"^$", direct_to_template, {"template": "homepage.html"}, name="home"),
+ url(r"^$", "demo.views.home", name="home"),
+ url(r"^tasks/(?P\d+)/done/$", "demo.views.mark_done", name="task_mark_done"),
+ url(r"^tasks/(?P\d+)/undone/$", "demo.views.mark_undone", name="task_mark_undone"),
+ url(r"^tasks/completed/$", "demo.views.complete_count_fragment", name="task_complete_count_fragment"),
+ url(r"^tasks/add/$", "demo.views.add", name="task_add"),
+ url(r"^tasks/(?P\d+)/delete/$", "demo.views.delete", name="task_delete"),
+
url(r"^admin/", include(admin.site.urls)),
-
url(r"^account/", include("account.urls")),
)
diff --git a/demo/views.py b/demo/views.py
new file mode 100644
index 0000000..dfbbdd6
--- /dev/null
+++ b/demo/views.py
@@ -0,0 +1,101 @@
+import json
+
+from django.http import HttpResponse
+from django.shortcuts import render, get_object_or_404
+from django.template import RequestContext
+from django.template.loader import render_to_string
+from django.views.decorators.http import require_POST
+
+from django.contrib.sessions.models import Session
+
+from demo.models import Task
+
+
+def home(request):
+ if not request.session.exists(request.session.session_key):
+ request.session.create()
+
+ return render(request, "homepage.html", {
+ "tasks": Task.objects.filter(
+ session__session_key=request.session.session_key
+ ),
+ "done_count": Task.objects.filter(
+ session__session_key=request.session.session_key,
+ done=True
+ ).count()
+ })
+
+
+def complete_count_fragment(request):
+ data = {
+ "html": render_to_string(
+ "_complete_count.html",
+ RequestContext(request, {
+ "done_count": Task.objects.filter(
+ done=True,
+ session__session_key=request.session.session_key
+ ).count()
+ })
+ )
+ }
+ return HttpResponse(json.dumps(data), mimetype="application/json")
+
+
+def _task_data(request, task):
+ data = {
+ "html": render_to_string(
+ "_task.html",
+ RequestContext(request, {
+ "task": task
+ })
+ )
+ }
+ return data
+
+
+@require_POST
+def mark_done(request, pk):
+ task = get_object_or_404(Task,
+ session__session_key=request.session.session_key,
+ pk=pk
+ )
+ task.done = True
+ task.save()
+ data = _task_data(request, task)
+ return HttpResponse(json.dumps(data), mimetype="application/json")
+
+
+@require_POST
+def mark_undone(request, pk):
+ task = get_object_or_404(Task,
+ session__session_key=request.session.session_key,
+ pk=pk
+ )
+ task.done = False
+ task.save()
+ data = _task_data(request, task)
+ return HttpResponse(json.dumps(data), mimetype="application/json")
+
+
+@require_POST
+def add(request):
+ session = Session.objects.get(session_key=request.session.session_key)
+ task = Task.objects.create(
+ session=session,
+ label=request.POST.get("label")
+ )
+ data = _task_data(request, task)
+ return HttpResponse(json.dumps(data), mimetype="application/json")
+
+
+@require_POST
+def delete(request, pk):
+ task = get_object_or_404(Task,
+ session__session_key=request.session.session_key,
+ pk=pk
+ )
+ task.delete()
+ data = {
+ "html": ""
+ }
+ return HttpResponse(json.dumps(data), mimetype="application/json")
diff --git a/fixtures/initial_data.json b/fixtures/initial_data.json
index 8242d9f..1774992 100644
--- a/fixtures/initial_data.json
+++ b/fixtures/initial_data.json
@@ -4,7 +4,7 @@
"model": "sites.site",
"fields": {
"domain": "localhost:8000",
- "name": "example.com [localhost]"
+ "name": "Ajax Tasks [localhost]"
}
},
{
@@ -12,7 +12,7 @@
"model": "sites.site",
"fields": {
"domain": "example.com",
- "name": "example.com"
+ "name": "Ajax Tasks"
}
}
]
diff --git a/manage.py b/manage.py
old mode 100644
new mode 100755