これは私が持っているものです:
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)に入力して送信ボタンをクリックすると、そのフォームからフィールド値がまったく渡されないためです。送信ボタンをクリックすると、空のフォームを渡すようなものです。何か案は?ありがとうございました!
フォームを提供する同じビューに投稿しています。そのため、最初はビューが呼び出され、フォームを提供します。フォームを投稿すると、同じビューが呼び出されますが、今回はフォームを処理します。そのため、アクションは空です。
テンプレートに変数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 %}">
何も必要ないはずです。次の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()
request.path
を使用できます。ほとんどの場合、それが機能します。