diff --git a/jobs/__init__.py b/jobs/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/jobs/admin.py b/jobs/admin.py
new file mode 100644
index 0000000..270122b
--- /dev/null
+++ b/jobs/admin.py
@@ -0,0 +1,8 @@
+from django.contrib import admin
+from jobs.models import Job
+
+
+class JobAdmin(admin.ModelAdmin):
+ list_display = ('title', 'company', 'location', 'url',)
+
+admin.site.register(Job, JobAdmin)
diff --git a/jobs/migrations/0001_initial.py b/jobs/migrations/0001_initial.py
new file mode 100644
index 0000000..90d310e
--- /dev/null
+++ b/jobs/migrations/0001_initial.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding model 'Job'
+ db.create_table(u'jobs_job', (
+ (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('title', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('company', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('location', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('url', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
+ ('modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
+ ))
+ db.send_create_signal(u'jobs', ['Job'])
+
+
+ def backwards(self, orm):
+ # Deleting model 'Job'
+ db.delete_table(u'jobs_job')
+
+
+ models = {
+ u'jobs.job': {
+ 'Meta': {'object_name': 'Job'},
+ 'company': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'url': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+ }
+ }
+
+ complete_apps = ['jobs']
\ No newline at end of file
diff --git a/jobs/migrations/__init__.py b/jobs/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/jobs/models.py b/jobs/models.py
new file mode 100644
index 0000000..8b156df
--- /dev/null
+++ b/jobs/models.py
@@ -0,0 +1,16 @@
+from django.db import models
+
+
+class Job(models.Model):
+ """An individual Job."""
+
+ title = models.CharField(max_length=255)
+ company = models.CharField(max_length=255)
+ location = models.CharField(max_length=255)
+ url = models.CharField(max_length=255)
+
+ created = models.DateTimeField(auto_now_add=True, editable=False)
+ modified = models.DateTimeField(auto_now=True, editable=False)
+
+ def __unicode__(self):
+ return self.title
diff --git a/jobs/templates/jobs/jobs.html b/jobs/templates/jobs/jobs.html
new file mode 100644
index 0000000..42b2f48
--- /dev/null
+++ b/jobs/templates/jobs/jobs.html
@@ -0,0 +1,31 @@
+{% extends "base.html" %}
+
+{% load pagination_tags %}
+
+{% block page-title %}Snipt Jobs{% endblock %}
+
+{% block body-class %}{{ block.super }} static jobs{% endblock %}
+
+{% block breadcrumb %}
+
Snipt Jobs
+{% endblock %}
+
+{% block content %}
+
+{% endblock %}
diff --git a/jobs/tests.py b/jobs/tests.py
new file mode 100644
index 0000000..501deb7
--- /dev/null
+++ b/jobs/tests.py
@@ -0,0 +1,16 @@
+"""
+This file demonstrates writing tests using the unittest module. These will pass
+when you run "manage.py test".
+
+Replace this with more appropriate tests for your application.
+"""
+
+from django.test import TestCase
+
+
+class SimpleTest(TestCase):
+ def test_basic_addition(self):
+ """
+ Tests that 1 + 1 always equals 2.
+ """
+ self.assertEqual(1 + 1, 2)
diff --git a/jobs/views.py b/jobs/views.py
new file mode 100644
index 0000000..61a7b96
--- /dev/null
+++ b/jobs/views.py
@@ -0,0 +1,9 @@
+from annoying.decorators import render_to
+from jobs.models import Job
+
+
+@render_to('jobs/jobs.html')
+def jobs(request):
+ return {
+ 'jobs': Job.objects.all().order_by('-created')
+ }
diff --git a/settings.py b/settings.py
index 15704c1..ace080a 100644
--- a/settings.py
+++ b/settings.py
@@ -103,6 +103,7 @@ INSTALLED_APPS = (
'accounts',
'blogs',
+ 'jobs',
'snipts',
'utils',
)
diff --git a/templates/base.html b/templates/base.html
index 44aff86..6e8e535 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -112,6 +112,9 @@
{% endif %}
+
+ Jobs
+
{% if request.user.is_authenticated %}
diff --git a/templates/homepage.html b/templates/homepage.html
index 5fadb0b..aee17a9 100644
--- a/templates/homepage.html
+++ b/templates/homepage.html
@@ -35,6 +35,9 @@
Search
+
+ Jobs
+
{% if not request.user.is_authenticated %}
Log in
diff --git a/templates/jobs.html b/templates/jobs.html
deleted file mode 100644
index dad3638..0000000
--- a/templates/jobs.html
+++ /dev/null
@@ -1,118 +0,0 @@
-{% extends "base.html" %}
-
-{% load pagination_tags %}
-
-{% block page-title %}Snipt Jobs{% endblock %}
-
-{% block body-class %}{{ block.super }} static jobs{% endblock %}
-
-{% block breadcrumb %}
- Snipt Jobs
-{% endblock %}
-
-{% block content %}
-
- New (7)
-
- Past week (27)
-
- -
-
-
- Visual Designer
- Acto A/S
-
-
- Dallas, TX, USA
- Oct 15, 2012
-
-
-
- -
-
-
- Visual Designer
- Acto A/S
-
-
- Dallas, TX, USA
- Oct 15, 2012
-
-
-
- -
-
-
- Visual Designer
- Acto A/S
-
-
- Dallas, TX, USA
- Oct 15, 2012
-
-
-
- -
-
-
- Visual Designer
- Acto A/S
-
-
- Dallas, TX, USA
- Oct 15, 2012
-
-
-
- -
-
-
- Visual Designer
- Acto A/S
-
-
- Dallas, TX, USA
- Oct 15, 2012
-
-
-
-
-
-{% endblock %}
diff --git a/urls.py b/urls.py
index 2b5e90c..daba7c4 100644
--- a/urls.py
+++ b/urls.py
@@ -5,13 +5,15 @@ from django.views.generic import TemplateView
from django.http import HttpResponseRedirect
from django.contrib import admin
from snipts.api import (PublicSniptResource, PublicTagResource,
- PublicUserResource, PrivateSniptResource,
- PrivateFavoriteResource, PrivateUserProfileResource,
- PrivateTagResource, PrivateUserResource)
+ PublicUserResource, PrivateSniptResource,
+ PrivateFavoriteResource, PrivateUserProfileResource,
+ PrivateTagResource, PrivateUserResource)
from snipts.views import search
from tastypie.api import Api
from utils.views import SniptRegistrationView
-from views import (homepage, lexers, login_redirect, pro_signup, sitemap, tags, pro_signup_complete)
+from jobs.views import jobs
+from views import (homepage, lexers, login_redirect, pro_signup, sitemap, tags,
+ pro_signup_complete)
import admin as custom_admin
import os
@@ -45,6 +47,7 @@ urlpatterns = patterns('',
url(r'^humans.txt$', TemplateView.as_view(template_name='humans.txt')),
url(r'^sitemap.xml$', sitemap),
url(r'^tags/$', tags),
+ url(r'^jobs/$', jobs),
url(r'^pro/$', TemplateView.as_view(template_name='pro.html')),
url(r'^pro/signup/$', pro_signup),
diff --git a/views.py b/views.py
index 836edab..bc6ffe9 100644
--- a/views.py
+++ b/views.py
@@ -11,10 +11,12 @@ from django.db.models import Count
from snipts.models import Snipt
from taggit.models import Tag
-import hashlib, stripe
+import hashlib
+import stripe
from settings_local import STRIPE_SECRET_KEY
+
@render_to('homepage.html')
def homepage(request):
@@ -28,7 +30,8 @@ def homepage(request):
).order_by('?')
for user in users_with_gravatars:
- public_snipts_count = Snipt.objects.filter(user=user, public=True).values('pk').count()
+ public_snipts_count = Snipt.objects.filter(
+ user=user, public=True).values('pk').count()
if public_snipts_count:
user.email_md5 = hashlib.md5(user.email.lower()).hexdigest()
@@ -43,6 +46,7 @@ def homepage(request):
'users_count': User.objects.all().count(),
}
+
@ajax_request
def lexers(request):
lexers = get_lexers_list()
@@ -69,12 +73,14 @@ def lexers(request):
return {'objects': objects}
+
def login_redirect(request):
if request.user.is_authenticated():
return HttpResponseRedirect('/' + request.user.username + '/')
else:
return HttpResponseRedirect('/')
+
@login_required
@render_to('pro-signup.html')
def pro_signup(request):
@@ -82,6 +88,7 @@ def pro_signup(request):
return HttpResponseRedirect('/' + request.user.username + '/')
return {}
+
@login_required
@render_to('pro-signup-complete.html')
def pro_signup_complete(request):
@@ -93,11 +100,9 @@ def pro_signup_complete(request):
plan = 'snipt-pro-monthly'
- customer = stripe.Customer.create(
- card = token,
- plan = plan,
- email = request.user.email
- )
+ customer = stripe.Customer.create(card=token,
+ plan=plan,
+ email=request.user.email)
profile = request.user.profile
profile.is_pro = True
@@ -109,6 +114,7 @@ def pro_signup_complete(request):
else:
return HttpResponseBadRequest()
+
def sitemap(request):
tags = Tag.objects.filter(snipt__public=True)
@@ -116,9 +122,10 @@ def sitemap(request):
tags = tags.order_by('-count')[:1000]
return render_to_response('sitemap.xml',
- {'tags': tags},
- context_instance=RequestContext(request),
- mimetype='application/xml')
+ {'tags': tags},
+ context_instance=RequestContext(request),
+ mimetype='application/xml')
+
@render_to('tags.html')
def tags(request):
@@ -127,7 +134,8 @@ def tags(request):
all_tags = all_tags.annotate(count=Count('taggit_taggeditem_items__id'))
popular_tags = Tag.objects.filter(snipt__public=True)
- popular_tags = popular_tags.annotate(count=Count('taggit_taggeditem_items__id'))
+ popular_tags = popular_tags.annotate(
+ count=Count('taggit_taggeditem_items__id'))
popular_tags = popular_tags.order_by('-count')[:20]
popular_tags = sorted(popular_tags, key=lambda tag: tag.name)