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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
                return HttpResponseRedirect(reverse('proposal:newTarget', args=[id_prop]))
avec id_prop => mon ID
newTarget => le namespace pour la view

le fichier urls.py:

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'),
)
J'usque la tout marche !

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:

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')
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.

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 !