Ответ 1
Вы отправляете на тот же вид, который также служит форме. Итак, сначала вызывается и служит форме. Когда вы отправляете форму, вызывается тот же вид, но на этот раз вы обрабатываете форму. Поэтому действие пусто.
Это то, что у меня есть:
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) и нажимаю кнопку отправки, я вижу абсолютно никаких значений полей, переданных из этой формы. Это почти так, как будто я пропускаю пустую форму, когда я нажимаю кнопку отправки. Есть идеи? Спасибо!
Вы отправляете на тот же вид, который также служит форме. Итак, сначала вызывается и служит форме. Когда вы отправляете форму, вызывается тот же вид, но на этот раз вы обрабатываете форму. Поэтому действие пусто.
Если вы хотите явно установить действие, предполагая, что у вас есть переменное имя пользователя в вашем шаблоне,
<form name="form" method="post" action="{% url myview.views username %}">
или вы можете назначить имя для url в urls.py, чтобы вы могли ссылаться на него следующим образом:
# 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
, и это будет работать в большинстве случаев.