Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Arrasted

Django

Recommended Posts

Bom dia pessoal,

preciso renderizar um formulario dentro uma página através de um {% include 'contato.html'%}.

Se fosse um "model" criaria um context_processor e persistia os dados, mas não é o caso.

Aparentemente é algo muito simples, mas nao estou achando, o form não é renderizado.

Visto que o fórum tem mais tópicos desde a última visita, vou deixar o fonte para quem quiser.

 

 

/contato/ = form renderizado - template é contato.html

/ = nao renderiza - o template é index.html

o include é no "/" template acima.

 

Braços a todos

urls.py

from django.conf.urls.defaults import *
from django.contrib import admin
from django.conf import settings
from django.views.generic.simple import direct_to_template
admin.autodiscover()

urlpatterns = patterns('',
    #administracao
    (r'^admin/', include(admin.site.urls)),
    #inicial
    (r'^$', 'dadalto.gerencia.views.index'),
    #contato
    (r'^contato/$', 'dadalto.gerencia.views.contato'),
    #media
    (r'^media/(.*)$', 'django.views.static.serve',
     {'document_root': settings.MEDIA_ROOT}),
)

 

views.py

#-*- coding: utf-8 -*-
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from django.template import RequestContext
from django import forms
from django.core.mail import send_mail
#import dos models
from dadalto.gerencia.models import Categoria, Foto, Imagem
from dadalto.gerencia.forms import *
from django.views.generic.simple import direct_to_template

def index(request):
    categorias = Categoria.objects.all().order_by('nome')
    return render_to_response(
        'index.html',
        locals(),
        context_instance=RequestContext(request),
        )
# ******************************************************************************


def enviar(self):
        titulo = 'Mensagem enviada pelo Form'
        destino = 'ericolvr@gmail.com'
        texto = """
        Nome: %(nome)s
        E-mail: %(email)s
        Mensagem:
        %(mensagem)s
        """ % self.cleaned_data
        
        send_mail(
            subject = titulo,
            message = texto,
            from_email = destino,
            recipient_list = [destino],
            )
    
    
def contato(request):
    if request.method == 'POST':
        form = FormContato(request.POST)
        
        if form.is_valid():
            form.enviar()
            exibe = 'Mensagem enviada!'
            form = FormContato()
    
    else:
        form = FormContato()
    
    return direct_to_template(request, 'index.html',
                              extra_context={'form':form})

forms.py

# -*- coding:utf-8 -*-
from django import forms

class FormContato(forms.Form):
    nome = forms.CharField(max_length='30', required=True)
    email = forms.EmailField(label=u'E-mail', required=True)
    mensagem = forms.Field(widget=forms.Textarea)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei que tivesse postadot tudo, mas foi so metade hehe.

 

models.py

 

#-*- coding: utf-8 -*-
from django.db import models
from datetime import datetime
from django.core.urlresolvers import reverse
#SIGNALS
from django.db.models import signals
from django.template.defaultfilters import slugify


class Categoria(models.Model):
    nome = models.CharField(max_length="50")
    slug = models.SlugField(max_length="50", blank=True)
    def __unicode__(self):
        return self.nome
    
    def get_absolute_url(self):
        return reverse('categoria', kwargs={'slug': self.slug})

    
def categoria_pre_save(signal, instance, sender, **kwargs):
    instance.slug = slugify (instance.nome)
signals.pre_save.connect(categoria_pre_save, sender=Categoria)
# ******************************************************************************


class Foto(models.Model):
    categoria= models.ForeignKey('Categoria')
    nome = models.CharField(max_length="50", help_text='Nome da foto', blank=False)
    descricao = models.TextField(verbose_name='Descrição', blank=True)
    
    fotop = models.ImageField(
        upload_to='images',
        null=True,
        blank=True,
        verbose_name='Foto pqna',
        )
    
    fotog = models.ImageField(
        upload_to='images',
        null=True,
        blank=True,
        verbose_name='Foto gde',
        )
    
    incluida_em = models.DateTimeField(default=datetime.now, blank=True)
    slug = models.SlugField(max_length='50', blank=True)
    def __unicode__(self):
        return self.nome
    
    def get_absolute_url(self):
        return reverse('foto', kwargs={'slug': self.slug})
    

def foto_pre_save(signal, instance, sender, **kwargs):
    instance.slug = slugify (instance.nome)
signals.pre_save.connect(foto_pre_save, sender=Foto)
# ******************************************************************************


class Imagem(models.Model):
    class Meta:
        verbose_name_plural = ('Imagens de capa')
    nome = models.CharField(max_length='50')
    incluida_em = models.DateTimeField(default=datetime.now, blank=True)
            
    imagemg = models.ImageField(
        upload_to='images',
        null=True,
        blank=True,
        verbose_name='Imagem gde',
        )
    slug = models.SlugField(max_length='50', blank=True)
    def __unicode__(self):
        return self.nome
    
    def get_absolute_url(self):
        return reverse('imagem', kwargs={'slug': self.slug})
    
def imagem_pre_save(signal, instance, sender, **kwargs):
    instance.slug = slugify (instance.nome)
signals.pre_save.connect(imagem_pre_save, sender=Imagem)
    
# ******************************************************************************


JOB_CHOICES = (
    ('01', 'Aniversário'), ('02', 'Book'), ('03', 'Casamento'),
    ('04', 'Evento'), ('05', 'Gastronomia'), ('06', 'Externa'),
)

TIPO_CHOICES = (
    ('01', 'Pessoa Física'), ('02', 'Pessoa Jurídica'),
)

class Prospect(models.Model):
    tipo = models.CharField(max_length='50', choices=TIPO_CHOICES, verbose_name='Tipo cliente')
    nome = models.CharField(max_length='50')
    telefone = models.PositiveIntegerField(max_length='20', blank=True, help_text='Apenas números')
    celular = models.PositiveIntegerField(max_length='10', blank=True, help_text='Apenas números')
    email = models.EmailField(verbose_name='E-mail', blank=True)
    empresa = models.CharField(max_length='100', blank=True)
    tipo_foto = models.CharField(max_length='30', choices=JOB_CHOICES, verbose_name='Tipo de foto')
    dt = models.DateTimeField(default=datetime.now, blank=True,verbose_name='Cotado em')
    slug = models.SlugField(max_length='50', blank=True)
    previsto = models.DateTimeField(default=datetime.now, verbose_name='Previsto Para', blank=True)
    def __unicode__(self):
        return self.nome
    
    def get_absolute_url(self):
        return reverse('prospect', kwargs={'slug': self.slug})

def prospect_pre_save(signal, instance, sender, **kwargs):
    instance.slug = slugify (instance.nome)
signals.pre_save.connect(prospect_pre_save, sender=Prospect)
# ******************************************************************************

admin.py

 

#-*- coding: utf-8 -*-
from django.contrib import admin
from dadalto.gerencia.models import Categoria, Foto, Imagem, Prospect

class AdminCategoria(admin.ModelAdmin): 
    list_display = ('nome',)
    list_filter = ('nome',)
admin.site.register(Categoria, AdminCategoria)
# *****************************************************


class AdminFoto(admin.ModelAdmin): 
    list_display = ('categoria', 'nome',)
    list_filter = ('nome',)
    search_fileds = ('nome',)
    date_hierarchy = ('incluida_em')
admin.site.register(Foto, AdminFoto)
# *****************************************************

class AdminImagem(admin.ModelAdmin): 
    list_display = ('nome',)
    list_filter = ('nome',)
admin.site.register(Imagem, AdminImagem)
# *****************************************************

class AdminProspect(admin.ModelAdmin): 
    list_display = ('nome', 'tipo_foto', 'previsto',)
    list_filter = ('tipo',)
    search_fileds = ('nome',)
    date_hierarchy = ('previsto')
admin.site.register(Prospect, AdminProspect)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meio atrasado, mas não custa responder.

 

Bom, na verdade há um erro de conceito na sua aplicação. Você está incluindo um formulário que recebe um contexto com o form de uma view que não foi chamada, em outras palavras, o formulário não existe em index.html visto que você precisa acessar a url /contato/ para que ele seja instanciado.

 

A maneira correta de se fazer isso é estender o template index.html em um form.html chamando um bloco pré-existente em index para renderizar seu formulário no local desejado. Dessa forma sua view de contato apontaria para o form.html

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.