web-dev-qa-db-ja.com

django-ビューにパラメータが必要な場合、フォームアクションパラメータには何が入りますか?

これは私が持っているものです:

myview.pyパラメータuserをとるビューで:

def myview(request, user):
   form = MyForm(request.POST)
   ....
   return render_to_response('template.html',locals(), context_instance=RequestContext(request))

userはURLを介して渡されます。

urls.py

...

urlpatterns += patterns('myview.views',
    (r'^(?P<user>\w+)/', 'myview'),
)

...

また、template.htmlフォーム付き:

<form name="form" method="post" action=".">
...
</form>

myview関数がパラメーターを必要とする場合、フォームアクションパラメーターには何が入りますか?

今はaction="."。私が質問している理由は、フォームIn(templates.html)に入力して送信ボタンをクリックすると、そのフォームからフィールド値がまったく渡されないためです。送信ボタンをクリックすると、空のフォームを渡すようなものです。何か案は?ありがとうございました!

29
avatar

フォームを提供する同じビューに投稿しています。そのため、最初はビューが呼び出され、フォームを提供します。フォームを投稿すると、同じビューが呼び出されますが、今回はフォームを処理します。そのため、アクションは空です。

23
Timmy O'Mahony

テンプレートに変数sernameがあると仮定して、アクションを明示的に設定する場合は、

<form name="form" method="post" action="{% url myview.views username %}">

または、urls.pyでURLの名前を割り当てて、次のように参照できるようにします。

# 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 %}">
33
gladysbixly

何も必要ないはずです。次のURLにいると仮定します。

www.yoursite.com/users/johnsmith/

フォームは次のようになります。

<form name="form" method="post" action="">

この時点で、すでにmyviewにユーザーjohnsmithがいます。ビューは次のようになります。

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()
6
Thierry Lam

request.pathを使用できます。ほとんどの場合、それが機能します。

3
Gattster