私のアプリでは、フォームを生成するビューがあります。このフォームが有効な場合、ビューは別のフォームである別のビューにリダイレクトされますが、逆の一致のエラーメッセージが表示されます。Django:strange reverse match
私のviews.py:
def uploadData(request, dataType, method):
if method == 'single':
if dataType == 'Sequence-has-SNP':
if request.method == 'POST':
form = SeqHasSnpForm(request.POST)
if form.is_valid():
idSequence = form.cleaned_data['seq_linked']
return redirect('addSNPsSeq', idSequence)
else:
form = SeqHasSnpForm()
return render(request, 'myapp/upload_sequence-has-snp.html', locals())
else:
...
else:
...
def uploadSNPsToSeq(request, idSequence):
seq = Sequence.objects.get(PK_idSequence = idSequence)
thisSeqHasSnp = Seq_has_SNP.objects.filter(FK_idSequence = seq.PK_idSequence)
snpAll = SNP.objects.all()
if request.method == 'POST':
form = SelectSNPsForSeqForm(request.POST, snps=snpAll, seqHasSnps=thisSeqHasSnp)
if form.is_valid():
print('Yeaaahhh!')
else:
form = SelectSNPsForSeqForm(snps=snpAll, seqHasSnps=thisSeqHasSnp)
print(form)
return render(request, 'myapp/SNPs-to-add-to-sequence.html', locals())
私urls.py
urlpatterns = [
url(r'^SNPs-to-add-to-sequence_(?P<idSequence>.+)$', views.uploadSNPsToSeq, name='addSNPsSeq'),
url(r'^upload_(?P<dataType>[A-Za-z-]+)_(?P<method>(single|batch))$', views.uploadData, name='upload'),
...
url(r'^$', views.home, name='home')
]
私は私の2つのテンプレートがupload_sequence-has-snp.html
とSNPs-to-add-to-sequence.html
呼ばれています。
私は最初のフォームにアクセスでき、たとえばTEST
に等しいform.cleaned_data['seq_linked']
を選択するので、2つのフォームはOKです。私はuploadSNPsToSeq
にprint(form)
の端子に結果を見ることができますが、このビューの最後の行はNoReverseMatch error
を上げる:
NoReverseMatch at /myapp/SNPs-to-add-to-sequence_TEST
Reverse for 'upload' with arguments '('', '')' not found. 1 pattern(s) tried: ['myapp/upload_(?P<dataType>[A-Za-z-]+)_(?P<method>(single|batch))$']
それはmyapp/upload_...
代わりのmyapp/SNPs-to-add-to-sequence_...
を探している理由を私は理解していませんか?
ヒント?
あなたのテンプレート 'myappに/のSNPツーアドオンに-sequence.html'(またはそれが拡張テンプレート) '{%url 'upload' ...%}'が含まれています。変数がテンプレートコンテキストで設定されておらず、 '( ''、 '')'に評価されているため、これは失敗しています。 – Alasdair