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) и нажимаю кнопку отправки, я не вижу абсолютно никаких значений полей, переданных из этой формы. Это почти похоже на то, что я передаю пустую форму, когда нажимаю кнопку отправки. Любые идеи? Спасибо!


person avatar    schedule 29.03.2011    source источник


Ответы (4)


Вы публикуете в том же представлении, которое также обслуживает форму. Итак, сначала вызывается представление и обслуживает форму. Когда вы отправляете форму, вызывается то же представление, но на этот раз вы обрабатываете форму. Поэтому действие пустое.

person Timmy O'Mahony    schedule 29.03.2011
comment
Я посмотрю на это. Имеет смысл. Спасибо за ответ. - person avatar; 30.03.2011
comment
Если это так, что именно я должен сделать, чтобы этого избежать? - person avatar; 30.03.2011
comment
избавьтесь от точки в action=.. Затем форма будет отправлена ​​​​в то же представление и обработана. Чего вы пытаетесь избежать? Если вы хотите опубликовать сообщение в другом представлении, вы можете указать путь в действии, а не оставлять его пустым. - person Timmy O'Mahony; 30.03.2011

Если вы хотите явно задать действие, предполагая, что в вашем шаблоне есть переменная username,

<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 %}">
person gladysbixly    schedule 29.03.2011
comment
Используя тег шаблона URL-адреса, вам нужно иметь ' ' вокруг URL-адреса как: {% url 'myurl' parameter_to_pass %} - person Joel Carneiro; 26.01.2021

Он не должен ничего требовать. Предположим, вы находитесь по следующему адресу:

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()
person Thierry Lam    schedule 29.03.2011
comment
Некоторые браузеры (например, последние сборки Chrome) не смогут опубликовать сообщение, если атрибут действия пуст. - person shacker; 22.12.2013
comment
@shacker, может быть, action="." достаточно, чтобы решить проблему с хромом? - person Paolo; 02.03.2014

Вы можете использовать request.path, и это будет работать в большинстве случаев.

person Gattster    schedule 30.10.2013