Changeset 1:4d91cbed8dad
- Timestamp:
- 07/03/08 19:50:28 (21 months ago)
- Branch:
- default
- Files:
-
- 4 added
- 10 modified
-
projects/models.py (modified) (1 diff)
-
projects/urls.py (modified) (1 diff)
-
projects/views.py (modified) (1 diff)
-
site_media/css/base.css (modified) (6 diffs)
-
site_media/css/icons.css (modified) (1 diff)
-
site_media/images/icons/add.png (added)
-
site_media/images/icons/lightbulb.png (added)
-
site_media/images/icons/tag_blue.png (added)
-
templates/base.html (modified) (3 diffs)
-
templates/index.html (modified) (1 diff)
-
templates/projects/project_detail.html (modified) (2 diffs)
-
templates/projects/project_list.html (modified) (1 diff)
-
templates/search.html (added)
-
views.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
projects/models.py
r0 r1 1 1 from django.db import models 2 2 from django.db.models import permalink 3 import tagging 4 from tagging.fields import TagField 5 from tagging.models import Tag 6 3 7 4 8 class Project(models.Model): 5 """ A project is a resource holding some content """6 name = models.CharField(max_length=255)7 description = models.CharField(max_length=255)8 long_description = models.TextField(null=True, max_length=1000)9 slug = models.SlugField(prepopulate_from=("name",), unique=True)9 """ A project is a resource holding some content """ 10 name = models.CharField(max_length=255) 11 description = models.CharField(max_length=255) 12 long_description = models.TextField(null=True, max_length=1000) 13 slug = models.SlugField(prepopulate_from=("name",), unique=True) 10 14 11 homepage = models.CharField(blank=True, max_length=255) 12 feed = models.CharField(blank=True, max_length=255) 15 homepage = models.CharField(blank=True, max_length=255) 16 feed = models.CharField(blank=True, max_length=255) 17 18 repository = models.CharField(blank=True, max_length=255) 19 repository_type = models.CharField(blank=True, max_length=10) 20 repository_web = models.CharField(blank=True, null=True, max_length=255) 21 branches = models.CharField(blank=True, max_length=255) 22 report_bugs = models.CharField(blank=True, max_length=255) 23 added = models.DateField(blank=True, null=True) 24 last_updated = models.DateField(blank=True, null=True) 25 tags = TagField() 26 27 class Meta: 28 ordering = ('name',) 29 30 class Admin: 31 pass 32 33 def __unicode__(self): 34 return u'%s' % self.full_name 13 35 14 repository = models.CharField(blank=True, max_length=255) 15 repository_type = models.CharField(blank=True, max_length=10) 16 repository_web = models.CharField(blank=True, null=True, max_length=255) 17 branches = models.CharField(blank=True, max_length=255) 18 report_bugs = models.CharField(blank=True, max_length=255) 19 added = models.DateField(blank=True, null=True) 20 last_updated = models.DateField(blank=True, null=True) 36 @property 37 def full_name(self): 38 return u'%s' % (self.name) 21 39 22 class Meta: 23 ordering = ('name',) 40 @permalink 41 def get_absolute_url(self): 42 return ('project_detail', None, { 'slug': self.slug }) 24 43 25 class Admin:26 pass44 def set_tags(self, tags): 45 Tag.objects.update_tags(self, tags) 27 46 28 def __unicode__(self): 29 return u'%s' % self.full_name 30 31 @property 32 def full_name(self): 33 return u'%s' % (self.name) 34 35 @permalink 36 def get_absolute_url(self): 37 return ('project_detail', None, { 'slug': self.slug }) 47 def get_tags(self): 48 return Tag.objects.get_for_object(self) 49 50 # Tagging 51 52 tagging.register(Project) -
projects/urls.py
r0 r1 4 4 5 5 project_list = { 6 'queryset': Project.objects.all(),6 'queryset': Project.objects.all(), 7 7 } 8 8 9 9 10 10 urlpatterns = patterns('', 11 url( 12 regex = '^(?P<slug>[-\w]+)/$', 13 view = 'django.views.generic.list_detail.object_detail', 14 kwargs = project_list, 15 name = 'project_detail', 16 ), 17 url ( 18 regex = '^$', 19 view = 'django.views.generic.list_detail.object_list', 20 kwargs = project_list, 21 name = 'project_list', 22 ), 11 url( 12 regex = '^(?P<slug>[-\w]+)/$', 13 view = 'django.views.generic.list_detail.object_detail', 14 kwargs = project_list, 15 name = 'project_detail', 16 ), 17 url ( 18 regex = '^(?P<slug>[-\w]+)/add$', 19 view = 'django.views.generic.create_update.create_object', 20 kwargs = project_list, 21 name = 'project_add', 22 ), 23 url ( 24 regex = '^$', 25 view = 'django.views.generic.list_detail.object_list', 26 kwargs = project_list, 27 name = 'project_list', 28 ), 23 29 ) 24 30 -
projects/views.py
r0 r1 1 # Create your views here. 1 from django.newforms import ModelForm 2 from models import Project 3 4 class ProjectForm(ModelForm): 5 class Meta: 6 model = Project -
site_media/css/base.css
r0 r1 50 50 /* Content */ 51 51 52 div#breadcrumbs { 53 margin: 1em 3em; 54 } 55 52 56 div#content-all { 53 57 background-color: #ebf2f8; … … 68 72 69 73 div.content-main { 74 clear: both; 70 75 background-color: white; 71 76 -moz-border-radius: 5px; … … 87 92 /* Projects */ 88 93 94 div.content_head_sec { 95 float:right; 96 margin: 0 2em 0.5em 0; 97 } 98 89 99 div.project_list div.project_info { 90 100 border-bottom: 3px solid #eee; … … 95 105 } 96 106 97 div.project_list h3.name { 107 div.project_list h3.name, 108 div.project_list h4.name { 98 109 font-weight: normal; 99 110 font-size: 140%; … … 105 116 } 106 117 107 div.project_list h3, 108 div.project_details h3 { 118 div.content-main h3 { 109 119 color: #b65d0e; 110 120 } … … 133 143 } 134 144 145 /* Search */ 146 147 div.searchform.content_head_prim { 148 margin-left: 3em; 149 } 150 151 div.searchform label { 152 font-size: 90%; 153 font-color: gray; 154 margin-left: 0.5em; 155 } 156 157 div.searchform input.query { 158 height: 1.2em; 159 font-size: 1.2em; 160 padding-left: 0.5em; 161 } 162 163 div.searchform input.submit { 164 border-color: #4f87bd; 165 height: 1.5em; 166 } 167 135 168 /* Other elements */ 136 169 -
site_media/css/icons.css
r0 r1 22 22 /* Various icons */ 23 23 24 .i16.add { background-image: url('../images/icons/add.png'); } 24 25 .i16.branch { background-image: url('../images/icons/arrow_branch.png'); } 25 26 .i16.homepage { background-image: url('../images/icons/house.png'); } 27 .i16.idea { background-image: url('../images/icons/lightbulb.png'); } 26 28 .i16.language { background-image: url('../images/icons/comment.png'); } 29 .i16.link { background-image: url('../images/icons/world_link.png'); } 27 30 .i16.repository { background-image: url('../images/icons/drive_network.png'); } 28 .i16. link { background-image: url('../images/icons/world_link.png'); }31 .i16.tag { background-image: url('../images/icons/tag_blue.png'); } -
templates/base.html
r0 r1 5 5 <head> 6 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <title>{% block title %}{% endblock %}</title> 8 {# FIXME: decouple from /site_media #} 9 <link media="screen" href="{{ MEDIA_URL }}/css/base.css" type="text/css" rel="stylesheet" /> 7 <title>{% block title %}Transifex{% endblock %}</title> 8 <link media="screen" href="/site_media/css/base.css" type="text/css" rel="stylesheet" /> 10 9 <link media="screen" href="/site_media/css/icons.css" type="text/css" rel="stylesheet" /> 11 10 <meta content="text/html; charset=utf-8" http-equiv="content-type" /> … … 16 15 <div id="header"> 17 16 <div id="logo"> 18 < img src="/site_media/images/tx-logo.png" alt="Transifex logo" />17 <a href="{% url home %}"><img border="0" src="/site_media/images/tx-logo.png" alt="Transifex logo" /></a> 19 18 </div> 20 19 <div id="navmenu"> 21 20 <a href="{% url project_list %}">Projects</a> 21 | <a href="{% url search %}">Search</a> 22 22 </div> 23 23 {% comment %} … … 35 35 <div id="content-all"> 36 36 {% block body %} 37 <div id="breadcrumbs"> 38 {% block breadcrumb %}{% endblock %} 39 </div> 37 40 <div> 38 41 {% block content_title %}{% endblock %} 39 42 </div> 43 <div class="content-header"> 44 {% block content-header %}{% endblock %} 45 </div> 40 46 <div class="content-main"> 41 47 {% block content %}{% endblock %} -
templates/index.html
r0 r1 9 9 10 10 {% block content %} 11 <p>Please visit the <a href="{% url project_list %}">Project list</a> page. </p>12 11 {% endblock %} -
templates/projects/project_detail.html
r0 r1 1 {% extends "projects/base _projects.html" %}1 {% extends "projects/base.html" %} 2 2 3 {% block title %}{{ block.super }} | {{ object.full_name }}{% endblock %} 3 4 4 {% block title %}{{ object.full_title }}{% endblock %} 5 5 {% block breadcrumb %}{{ block.super }} » {{ object.name }}{% endblock %} 6 6 7 7 {% block content %} … … 43 43 {% endif %} 44 44 <tr> 45 <th class="i16 tag">Tags:</th> 46 <td>{% for tag in object.get_tags %}{{tag}} {%endfor%}</td> 47 </tr> 48 <tr> 45 49 <th class="i16 link">External resources:</th> 46 50 <td><ul> -
templates/projects/project_list.html
r0 r1 1 {% extends "projects/base_projects.html" %} 2 3 4 {% block title %}Projects{% endblock %} 5 1 {% extends "projects/base.html" %} 6 2 7 3 {% block content_title %} 8 <h2 class="pagetitle"> Find a project</h2>4 <h2 class="pagetitle">Projects on Transifex</h2> 9 5 {% endblock %} 10 6 7 {% block content-header %} 8 <div class="addproject content_head_sec"> 9 <span class="i16 add"><a href="{% url add_project %}">Add a new project</a></span> 10 </div> 11 {% endblock %} 11 12 12 13 {% block content %} -
views.py
r0 r1 1 from django.db.models import Q 2 from django.shortcuts import render_to_response 3 from txc.projects.models import Project 4 5 def search(request): 6 query = request.GET.get('q', '') 7 if query: 8 qset = ( 9 Q(name__icontains=query) 10 | Q(description__icontains=query) 11 # | Q(tags__last_name__icontains=query) 12 ) 13 results = Project.objects.filter(qset).distinct() 14 else: 15 results = [] 16 return render_to_response("search.html", { 17 "results": results, 18 "query": query 19 })
