私はコンテキストプロセッサを使用してプロジェクトで基本テンプレートにフォームをレンダリングしてフォームが正常に動作するように見えますが、投稿時にdjangoコンテキストプロセッサのフォームが表示されない
私はこのアプローチを以前は他のプロジェクトで使っていましたが、うまくいきましたが、今は何が起こったのか、どうしてそういうのか理解できません。ここで
は私のforms.pyです:
from django import forms
class VersionSelectorForm(forms.Form):
mode = forms.ChoiceField(widget=forms.RadioSelect(),
choices=(('live', 'Live'), ('history', 'History')),
initial='live',
required=True,
help_text='Required')
date = forms.DateField(widget=forms.TextInput(attrs={'class': 'datepicker'}),
required=True,
help_text='required')
def clean(self):
cleaned_data = super(VersionSelectorForm, self).clean()
mode = cleaned_data.get('mode')
date = cleaned_data.get('date')
if mode == 'history' and not date:
msg = 'Date should be picked if \'History\' mode selected'
self.add_error('date', msg)
view.py:
from django.shortcuts import redirect
from .forms import VersionSelectorForm
def select_version(request):
if request.method == "POST":
form = VersionSelectorForm(request.POST)
if form.is_valid():
print('I am valid')
mode = form.cleaned_data["mode"]
date = form.cleaned_data["date"]
if mode == "History":
request.session['selected_date'] = date
else:
request.session['selected_date'] = None
else:
form = VersionSelectorForm()
return redirect(request.META['HTTP_REFERER'])
context_processors.py:
from .forms import VersionSelectorForm
def VersionSelectorFormGlobal(request):
return {'version_selector_form': VersionSelectorForm()}
urls.py:base.htmlから
from django.contrib import admin
from diagspecgen import views
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^select_version/$', views.select_version, name='select_version'),
]
スニペット:settings.pyで
<section><div>
<form method="post" action="{% url 'select_version'%}">
{% csrf_token %}
{{ version_selector_form.as_p }}
<button type="submit">Submit</button>
</form>
</div></section>
そしてもちろん、私が追加した'diagspecgen.context_processors.VersionSelectorFormGlobal'
にcontext_processorsリスト。
事前にお手数をお掛けしてありがとうございます。
をそれは常にリダイレクトします。フォームが有効かどうかにかかわらず、常にリダイレクトされます。 –
@DanielRosemanはあなたの返事Denielに感謝します。この事件についてもう少し詳しく説明できますか?理由は、なぜ私は尋ねているのは、このアプローチが別のプロジェクトで行われたことです。唯一の違いは、フォームがMetaクラスのモデルから直接フォームに構築されていることです。今、変なことが起こっています。 – Michael
説明するものは何もありません。ビューの最後にはリダイレクトがあり、他の場所にはリターンはありません。したがって、リダイレクトは常に呼び出されます。これはモデルやメタとは関係ありません。 –