action=" help to describe this action url where to direct ?"
Я думаю, что это должно быть (и, вероятно, вы все еще получали ошибку, когда пытались это сделать):
action="{% url 'gen_results' %}"
А в твоих urls.py:
url(r'^generator', views.get, name='generator_url'),
возможно, следует указывать на views.generator?
Но это, вероятно, не является причиной того, что ваше представление gen_results возвращает 'None'. Я бы начал отлаживать, возвращает ли gen_results что-либо. Если render () не удался или URL-адрес сопоставлен с недопустимым представлением, вы получите другую ошибку - эта ошибка состоит в том, что views.gen_results никогда не достигает своего оператора return:
if request.method == 'POST':
# ... as you have it
else:
print('actual method=', request.method)
Удачи.
РЕДАКТИРОВАТЬ: немного больше о формах
(извините, если вы уже знаете все о формах)
предположительно в forms.py у вас есть что-то вроде:
class GenForm(forms.Form):
fields = forms.ChoiceField(choices=[(index,generator_name)])
Аргумент 'choices' хотел получить список из двух кортежей; Я думаю, что в настоящее время у вас просто есть имена в вашем шаблоне. Я не уверен, но я думаю, что первое поле предназначено для представления первичного ключа или кода, а второе - больше «display_name». Это может быть проще сделать (имя_ генератора, имя_ генератора)
Чтобы использовать форму как для GET, так и для POST, ваше представление (генератор) должно создать gen_form и установить значения для его выбора:
generator_list=[(generator,generator) for generator in generators]
gen_form = GenForm(choices=generator_list)
затем передайте его в шаблон:
return render(request, 'template', {'gen_form':gen_form})
затем его рендеринг «упрощен» до чего-то вроде (не проверял этот html, поэтому кнопка отправки может быть не совсем правильной, извините):
<form method="post" action="{% url gen_results %}">
{{ csrf_token }}
<p>Please select which generator you're interested in:</p>
{{ gen_form }}
<input type="submit">Submit</input>
</form>
В качестве альтернативы, вы не можете использовать API форм Django в любом месте и просто получить имя отправленного генератора из request.POST, как только вы определитесь, как он вызывается (напечатайте (request.POST)). request.POST ['generator_name'] должен возвращать выбранную строку, если форма или поле имели id = 'generator_name'.