Changeset 1:4d91cbed8dad

Show
Ignore:
Timestamp:
07/03/08 19:50:28 (21 months ago)
Author:
Dimitris Glezos <dimitris@…>
Branch:
default
Message:

Added search, tags and fixed tab spacing according to PEP 8

Files:
4 added
10 modified

Legend:

Unmodified
Added
Removed
  • projects/models.py

    r0 r1  
    11from django.db import models 
    22from django.db.models import permalink 
     3import tagging 
     4from tagging.fields import TagField 
     5from tagging.models import Tag 
     6 
    37 
    48class 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) 
    1014 
    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 
    1335   
    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) 
    2139   
    22   class Meta: 
    23     ordering = ('name',) 
     40    @permalink 
     41    def get_absolute_url(self): 
     42        return ('project_detail', None, { 'slug': self.slug }) 
    2443 
    25   class Admin: 
    26     pass 
     44    def set_tags(self, tags): 
     45        Tag.objects.update_tags(self, tags) 
    2746 
    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 
     52tagging.register(Project) 
  • projects/urls.py

    r0 r1  
    44 
    55project_list = { 
    6   'queryset': Project.objects.all(), 
     6    'queryset': Project.objects.all(), 
    77} 
    88 
    99 
    1010urlpatterns = 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     ), 
    2329) 
    2430 
  • projects/views.py

    r0 r1  
    1 # Create your views here. 
     1from django.newforms import ModelForm 
     2from models import Project 
     3 
     4class ProjectForm(ModelForm): 
     5    class Meta: 
     6        model = Project 
  • site_media/css/base.css

    r0 r1  
    5050/* Content */ 
    5151 
     52div#breadcrumbs { 
     53  margin: 1em 3em; 
     54} 
     55 
    5256div#content-all { 
    5357  background-color: #ebf2f8; 
     
    6872 
    6973div.content-main { 
     74  clear: both; 
    7075  background-color: white; 
    7176  -moz-border-radius: 5px; 
     
    8792/* Projects */ 
    8893 
     94div.content_head_sec { 
     95  float:right; 
     96  margin: 0 2em 0.5em 0;  
     97} 
     98 
    8999div.project_list div.project_info { 
    90100  border-bottom: 3px solid #eee; 
     
    95105} 
    96106 
    97 div.project_list h3.name { 
     107div.project_list h3.name, 
     108div.project_list h4.name { 
    98109  font-weight: normal; 
    99110  font-size: 140%; 
     
    105116} 
    106117 
    107 div.project_list h3, 
    108 div.project_details h3 { 
     118div.content-main h3 { 
    109119  color: #b65d0e; 
    110120} 
     
    133143} 
    134144 
     145/* Search */ 
     146 
     147div.searchform.content_head_prim { 
     148  margin-left: 3em; 
     149} 
     150 
     151div.searchform label { 
     152  font-size: 90%; 
     153  font-color: gray; 
     154  margin-left: 0.5em; 
     155} 
     156 
     157div.searchform input.query { 
     158  height: 1.2em; 
     159  font-size: 1.2em; 
     160  padding-left: 0.5em; 
     161} 
     162 
     163div.searchform input.submit { 
     164  border-color: #4f87bd; 
     165  height: 1.5em; 
     166} 
     167 
    135168/* Other elements */ 
    136169 
  • site_media/css/icons.css

    r0 r1  
    2222/* Various icons */ 
    2323 
     24.i16.add { background-image: url('../images/icons/add.png'); } 
    2425.i16.branch { background-image: url('../images/icons/arrow_branch.png'); } 
    2526.i16.homepage { background-image: url('../images/icons/house.png'); } 
     27.i16.idea { background-image: url('../images/icons/lightbulb.png'); } 
    2628.i16.language { background-image: url('../images/icons/comment.png'); } 
     29.i16.link { background-image: url('../images/icons/world_link.png'); } 
    2730.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  
    55<head> 
    66        <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" /> 
    109    <link media="screen" href="/site_media/css/icons.css" type="text/css" rel="stylesheet" /> 
    1110    <meta content="text/html; charset=utf-8" http-equiv="content-type" /> 
     
    1615    <div id="header"> 
    1716      <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> 
    1918      </div> 
    2019      <div id="navmenu"> 
    2120        <a href="{% url project_list %}">Projects</a> 
     21        | <a href="{% url search %}">Search</a> 
    2222      </div> 
    2323      {% comment %} 
     
    3535    <div id="content-all"> 
    3636    {% block body %} 
     37      <div id="breadcrumbs"> 
     38        {% block breadcrumb %}{% endblock %} 
     39      </div> 
    3740      <div> 
    3841        {% block content_title %}{% endblock %} 
    3942      </div> 
     43     <div class="content-header"> 
     44        {% block content-header %}{% endblock %} 
     45     </div> 
    4046     <div class="content-main"> 
    4147        {% block content %}{% endblock %} 
  • templates/index.html

    r0 r1  
    99 
    1010{% block content %} 
    11   <p>Please visit the <a href="{% url project_list %}">Project list</a> page. </p> 
    1211{% endblock %} 
  • templates/projects/project_detail.html

    r0 r1  
    1 {% extends "projects/base_projects.html" %} 
     1{% extends "projects/base.html" %} 
    22 
     3{% block title %}{{ block.super }} | {{ object.full_name }}{% endblock %} 
    34 
    4 {% block title %}{{ object.full_title }}{% endblock %} 
    5  
     5{% block breadcrumb %}{{ block.super }} &raquo; {{ object.name }}{% endblock %} 
    66 
    77{% block content %} 
     
    4343        {% endif %} 
    4444        <tr> 
     45          <th class="i16 tag">Tags:</th> 
     46          <td>{% for tag in object.get_tags %}{{tag}} {%endfor%}</td> 
     47        </tr> 
     48        <tr> 
    4549          <th class="i16 link">External resources:</th> 
    4650          <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" %} 
    62 
    73{% block content_title %} 
    8   <h2 class="pagetitle">Find a project</h2> 
     4  <h2 class="pagetitle">Projects on Transifex</h2> 
    95{% endblock %} 
    106 
     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 %} 
    1112   
    1213{% block content %} 
  • views.py

    r0 r1  
     1from django.db.models import Q 
     2from django.shortcuts import render_to_response 
     3from txc.projects.models import Project 
     4 
     5def 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    })