Commits

Francisco Souza  committed b6417d8

Adição dos arquivos iniciais para funcionamento da app "projetos".

Ainda não está 100% funcional.

  • Participants
  • Parent commits 4e14bce

Comments (0)

Files changed (10)

File projetos/__init__.py

Empty file added.

File projetos/admin.py

+from django.contrib import admin
+from django.contrib.admin.options import ModelAdmin
+from models import Projeto
+from forms import ProjetoForm
+
+class ProjetoAdmin(ModelAdmin):
+    form = ProjetoForm
+    list_display = ('titulo', 'web_url', )
+    search_field = ('titulo', 'descricao', )
+    
+admin.site.register(Projeto, ProjetoAdmin)

File projetos/forms.py

+from django import forms
+from django.template.defaultfilters import slugify
+from google.appengine.ext import db
+
+from models import Projeto
+
+class ProjetoForm(forms.ModelForm):
+    class Meta:
+        model = Projeto
+        fields = ('titulo', 'descricao', 'src_url', 'web_url', 'imagem', )
+    
+    def save(self, commit = True):
+        projeto = super(ProjetoForm, self).save(commit = False)
+        
+        if not projeto.slug:
+            slug = slugify(projeto.titulo)
+            novo_slug = slug
+            contador = 0
+            
+            print Projeto.all()
+            
+            q = db.GqlQuery('SELECT * FROM Projeto WHERE slug = :1 AND id != :2', novo_slug, projeto.id)
+            
+            while q.count() > 0:
+                contador += 1
+                novo_slug = '%s-%d' %(slug, contador)
+                q = db.GqlQuery('SELECT * FROM Projeto WHERE slug = :1 AND id != :2', novo_slug, projeto.id)
+            
+            projeto.slug = novo_slug
+            
+        if commit:
+            projeto.save()
+        
+        return projeto

File projetos/models.py

+#coding:utf-8
+from google.appengine.ext import db
+from django.core.urlresolvers import reverse
+from django.template.defaultfilters import slugify
+
+class Projeto(db.Model):
+    titulo = db.StringProperty(required=True)
+    descricao = db.StringProperty(required=True, multiline=True)
+    src_url = db.StringProperty('Código fonte na web', required=False)
+    web_url = db.StringProperty('Endereço na web', required=False)
+    imagem = db.BlobProperty('Imagem do projeto', required=False)
+    slug = db.StringProperty(required=False)
+    
+    def get_url(self):
+        return reverse('projetos.views.projeto', kwargs = {'slug' : self.slug })
+    
+def projeto_pre_save(signal, instance, sender, **kwargs):
+    if not instance.slug:
+        slug = slugify(instance.titulo)
+        novo_slug = slug
+        contador = 0
+        
+        while Projeto.all().filter(slug=novo_slug).exclude(id=instance.id).count() > 0:
+            contador += 1
+            novo_slug = '%s-%d' %(slug, contador)
+            
+        instance.slug = novo_slug

File projetos/templates/projetos/lista_projetos.html

+{% extends "blog_model.html" %}
+
+{% block "titulo" %}{{ block.super }} | Projetos{% endblock "titulo" %}
+
+{% block "conteudo" %}
+    <div class="post" id="post">
+        <h2 class="title">Projetos</h2>
+        <div class="entry">
+            {% if not projetos %}
+                <p>Não existem projetos cadastrados ainda!</p>
+            {% else %}
+                <p>Veja abaixo os detalhes de alguns projetos meus. Todos os projetos são pessoais e/ou comunitários, não há nenhum projeto privado aqui.</p>
+                <ul>
+                    {% for projeto in projetos %}
+                        <li><a href="{{ projeto.get_url }}">{{ projeto.titulo }}</a></li>
+                    {% endfor %}
+                </ul>
+            {% endif %}
+        </div>
+    </div>
+{% endblock "conteudo" %}

File projetos/urls.py

+from django.conf.urls.defaults import *
+
+urlpatterns = patterns('projetos.views',
+    url(r'^$', 'lista'),
+    url(r'^(?P<slug>[\w_-]+)$', 'projeto'),
+)

File projetos/views.py

+# Create your views here.
+from django.shortcuts import render_to_response
+from django.template import RequestContext
+from models import Projeto
+
+def lista(request):
+    projetos = Projeto.all()
+    return render_to_response('projetos/lista_projetos.html', locals(), RequestContext(request))
+
+def projeto(request, slug):
+    projetos = Projeto.all()
+    return render_to_response('projetos/lista_projetos.html', locals(), RequestContext(request))
 
 ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
 
-DEBUG = False
+DEBUG = True
 TEMPLATE_DEBUG = DEBUG
 
 SITE_ID = 1
     'appenginepatcher',
     'ragendja',
     'mediautils',
+    'projetos',
 )
 
 # List apps which should be left out from app settings and urlsauto loading

File templates/blog_model.html

 <div class="menu1 section" id="menu1"><div class="widget LinkList" id="LinkList1">
 <div class="widget-content">
 <ul>
-<li><A href="http://blog.franciscosouza.net">Home</A></LI>
-<li><A href="/sobre">Sobre</A></LI>
-<li><A href="/contato">Contato</A></LI>
+<li><a href="http://blog.franciscosouza.net">Home</a></li>
+<li><a href="/projetos">Projetos</a></li>
+<li><a href="/sobre">Sobre</a></li>
+<li><a href="/contato">Contato</a></li>
 </ul>
 </div>
 </div></div>
     (r'^admin/', include(admin.site.urls)),
     (r'^$', 'views.redireciona'),
     (r'^contato/', 'views.contato'),
+    (r'^projetos/', include('projetos.urls')),
     #(r'criar_admin/', 'views.criar_admin'),
 )