Bonjour,
Alors, voila mon problème.
Avec une expression réguliere dans mon url, j'appel une view et un template qui me permettent de remplir un formulaire. De plus l'argument que je passe a la seconde view via l'url et un ID d'un enregistement dans ma base de données .
Je procède ainsi :
avec id_prop => mon ID
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 return HttpResponseRedirect(reverse('proposal:newTarget', args=[id_prop]))
newTarget => le namespace pour la view
le fichier urls.py:
J'usque la tout marche !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #! usr/bin/python # -*- coding: UTF-8 -*- from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('proposal.views', # (urlaccess , view name, name for templates) url(r'^proposal$', 'proposal_create', name='newProposal'), url(r'^keywords$', 'keywords_create', name='addkeywords'), url(r'^status$', 'proposal_status', name='proposalStatus'), url(r'^target/(?P<id_prop>\d+)$', 'target_create', name='newTarget'), url(r'^target$', 'target_create', name='newTarget'), )
C'est ensuite que les choses se compliquent.
J'arrive donc sur ma seconde view. avec une url du type "CTAproposal/target/12" par exemple.
code de la seconde view:
La, Django execute une premiere fois ma vue. arrive au return (on voit que j'ai testé de faire le return de pas mal de facon différente ). Et plante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 def target_create(request, id_prop): print(id_prop); proposal = Proposal.objects.get(proposalID = id_prop) if request.method == 'POST': print(request.get_full_path()) if "submit" in request.POST: targetform = TargetForm(request.POST) if targetform.is_valid(): target = targetform.save(commit=False) target.save() proposal.targets_id = target return HttpResponseRedirect(request.get_full_path()) #return HttpResponseRedirect('newTarget', id_prop) #return HttpResponseRedirect(reverse('proposal:newTarget', args=[id_prop])) #return render(request, 'new_target.html')
Avec le premier return, mon navigateur affiche "The page isn't redirecting properly". J'ai l'impression que le code boucle inf
Le deuxieme , aucun url ne match avec la nouvelle url (logique). A savoir : "CTAproposal/target/newTarget"
La troisième option, pareil que la première option. J'ai l'impression qu'il y a une boucle inf qui se forme.Cependant l'url renvoyée est bonne.
Et pour la derniere option, j'obtient le TypeError "target_create() missing 1 required positional argument: 'id_prop'". Et effectivement il manque bien l'argument dans mon url.
Moi j'aimerais arriver sur la page de ma vue. Avoir accès a mon argument contenant l'ID que j'ai besoin de faire passser et puis pouvoir remplir mon formulaire.
Alors, si quelqu'un comprend pourquoi ce que je fait avec les urls ne marche pas. Je suis preneur pour tout conseil /explication /solution.
Merci d'avance !
Partager