Django-fr

Forum

#1 13-11-2015 15:26:36

Napoleon
Membre
Inscription : 27-08-2015
Messages : 16

Help view avec un argument passé par une url

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 :

return HttpResponseRedirect(reverse('proposal:newTarget', args=[id_prop]))

avec id_prop => mon ID
newTarget => le namespace pour la view

le fichier urls.py:

#! 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 ! smile

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:

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 ! wink

Hors ligne

Pied de page des forums