Vous n'êtes pas identifié(e).
Bonsoir à tous,
J'ai un problème concernant HttpResponsesRedirect..
J'ai créer une page de Contact.
J'arrive à envoyer le e-mail via les serveurs, mais pas la page de confirmation.
J'ai trouvé quelques exemples, mais aucun n'a besoin du /urls.py.
Pourtant moi, il me dit qu'il ne le trouve pas de page. Erreur 404
mysite/templates/contact/contact.html
mysite/templates/contact/confirm.html ( si django n'en fournit pas.. )
mysite/contact/forms.py
mysite/contact/urls.py
Je dois rien mettre dans urls ( selon les exemples )
mysite/contact/views.py :
#-*- coding:Utf-8 -*-
from contact.forms import ContactForm
from django.shortcuts import render
from datetime import datetime
from django.http import HttpResponseRedirect
# Create your views here.
def contact(request):
if request.method == 'POST': # S'il s'agit d'une requête POST
form = ContactForm(request.POST) #On reprend les données
if form.is_valid(): # On vérifie que les données envoyées sont valides
# Ici on peut traiter les données du formulaire
sujet = form.cleaned_data['sujet']
message = form.cleaned_data['message']
envoyeur = form.cleaned_data['envoyeur']
renvoi = form.cleaned_data['renvoi']
destinataires = ['monemail@mail.com']
if renvoi:
destinataires.append(envoyeur)
# On envoie le mail grâce à une fonction fourni par Django
from django.core.mail import send_mail
send_mail(sujet, message, envoyeur, destinataires)
return HttpResponseRedirect('confirm/') # On redirige l'utilisateur vers une page de confirmation
else: # Si c'est pas du POST, c'est probablement une requête GET
form = ContactForm() # On crée un formulaire vide
return render(request, 'contact/contact.html', {'form': form,'current_date': datetime.now()}) # On envoie le template avec le formulaire qu'on a construit plus haut
#J'essayait de créer un fonction pour remplacer HttpResponseRedirect
def confimation(request):
return render(request, 'contact/confirm.html', {'current_date': datetime.now()})
Es-ce que la page de confirmation, viens avec le formulaire via django ( déjà tout fait ) ?
Sinon, comment je dois lui renvoyez ma page de confirmation /contact/confirm.html
merci d'avance pour vos réponses
A+
Hors ligne
Tu rediriges vers une page en relatif. Attention donc à ce que ton fichiers urls.py corresponde.
Le mieux reste de faire un redirect en absolu:
return HttpResponseRedirect('/confirm/')
Hors ligne
Salut et merci pour ta réponse rapide
Mais c'est exactement ça que je comprend pas.
Si le lien est en absolu
Où prend t'il la page de confirmation?
Avoir utiliser un return Render('/contact/confirm.html'), là il trouverait, mais un HttpResponsesRedirect... en lien absolu, aucune idée..
Tout ce que ça me dit c'est qu'il trouve pas le lien url...
return HttpResponseRedirect('/confirm/')
le '/confirm/', quand j'écris cela,django debug_me dit qu'il n'y a pas de urls.
Using the URLconf defined in nltsite.urls, Django tried these URL patterns, in this order:
^/?$
^union/
^contact/ ^/?$
^forum/$
^forum/(?P<forum_id>\d+)/$
^thread/(?P<thread_id>\d+)/$
Donc dans urls.py ( du programme ) j'écris quoi? en lien absolu.. C'est là que je bloque, puisque tous les exemples
de documentation django ne parle aucunement du fichier urls.py
Uniquement la modification de ; views.py, forms.py, settings.py, templates
Je vais faire des recherches sur les liens absolu
Merci encore et d'avance )
Hors ligne
Il te manque la vue et l'url associée à ta page de confirmation.
Le Render est simplement un affichage d'une page et non une redirection.
Hors ligne
Merci, je sais pas pourquoi, mais j'ai trouvé le problème
dans le contact/urls.py
je dois enlever le patterns('contact.views',)
par patterns('',)
et mettre ceci..
urlpatterns = patterns('',
url(r'^/?$', 'contact.views.contact'),
url(r'^confirm/', 'contact.views.confirmation'),
)
Ça reviens au même, pourtant.
Résolus
Merci de ton aide.
Dernière modification par nolimitech (15-02-2015 01:22:42)
Hors ligne