Voici ce que j'ai:
myview.py
avec une vue qui prend un paramètre user
:
def myview(request, user):
form = MyForm(request.POST)
....
return render_to_response('template.html',locals(), context_instance=RequestContext(request))
user
passe par une URL.
urls.py
:
...
urlpatterns += patterns('myview.views',
(r'^(?P<user>\w+)/', 'myview'),
)
...
J'ai aussi un template.html
avec un formulaire:
<form name="form" method="post" action=".">
...
</form>
Que se passe-t-il dans le paramètre d'action de formulaire si la fonction myview
nécessite un paramètre?
En ce moment, j'ai action="."
. La raison pour laquelle je demande, c'est parce que lorsque je remplis le formulaire dans (templates.html) et que je clique sur le bouton Envoyer, je ne vois absolument aucune valeur de champ transmise à partir de ce formulaire. C'est presque comme si je passais un formulaire vide lorsque je clique sur le bouton soumettre. Des idées? Je vous remercie!
Vous publiez dans la même vue qui sert également le formulaire. Donc au début, la vue est appelée et sert le formulaire. Lorsque vous publiez le formulaire, la même vue est appelée mais cette fois, vous traitez le formulaire. C'est pourquoi l'action est vide.
Si vous souhaitez définir explicitement l'action, en supposant que vous avez une variable nom d'utilisateur dans votre modèle,
<form name="form" method="post" action="{% url myview.views username %}">
ou vous pouvez attribuer un nom à l'URL dans votre urls.py afin que vous puissiez la référencer comme ceci:
# urls.py
urlpatterns += patterns('myview.views',
url(r'^(?P<user>\w+)/', 'myview', name='myurl'), # I can't think of a better name
)
# template.html
<form name="form" method="post" action="{% url myurl username %}">
Cela ne devrait rien exiger. En supposant que vous êtes à l'URL suivante:
www.yoursite.com/users/johnsmith/
Votre formulaire doit être:
<form name="form" method="post" action="">
À ce stade, vous êtes déjà dans myview
avec l'utilisateur johnsmith
. Votre vue devrait ressembler à ceci:
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
# you should be able to extract inputs from the form here
else:
form = MyForm()
Vous pouvez utiliser request.path
et cela fonctionnera dans la plupart des cas.