Подтвердить что ты не робот

Django - что входит в параметр действия вида, когда view требует параметр?

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

<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 %}">

Ответ 3

Он ничего не должен требовать. Предполагая, что вы находитесь на следующем 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()

Ответ 4

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