django - что входит в параметр действия формы, когда view требует параметр? - PullRequest
29 голосов
/ 29 марта 2011

Это то, что у меня есть:

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

Ответы [ 4 ]

33 голосов
/ 29 марта 2011

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

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

или вы можете назначить имя для URL в ваших URL.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 %}">
23 голосов
/ 29 марта 2011

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

6 голосов
/ 29 марта 2011

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

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()
3 голосов
/ 30 октября 2013

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

...