[英]Django: strange reverse match
In my app, I've got a view which generates a form. 在我的应用程序中,我有一个生成表单的视图。 When this form is valid the view redirect to another view which is another form, but I have an error message with the reverse match.
当此表单有效时,视图将重定向到另一种形式的另一个视图,但是我收到一条带有反向匹配的错误消息。
My views.py: 我的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())
my urls.py 我的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')
]
I have my 2 templates called upload_sequence-has-snp.html
and SNPs-to-add-to-sequence.html
. 我有2个模板,分别称为
upload_sequence-has-snp.html
和SNPs-to-add-to-sequence.html
。
The 2 forms are OK because I have access to my first form and for example select a form.cleaned_data['seq_linked']
equal to TEST
. 这两种形式都可以,因为我可以访问我的第一种形式,例如选择一个
form.cleaned_data['seq_linked']
等于TEST
。 I can see the result in the terminal of print(form)
in uploadSNPsToSeq
, but the last line of this view raise a NoReverseMatch error
: 我可以在
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))$']
I don't understand why is it looking for myapp/upload_...
instead of myapp/SNPs-to-add-to-sequence_...
? 我不明白为什么要寻找
myapp/upload_...
而不是myapp/SNPs-to-add-to-sequence_...
?
Any clue? 有什么线索吗?
Thanks Alasdair! 谢谢阿拉斯代尔! That was the issue.
这就是问题所在。
So in my views.py I replaced idSequence
by dataType
, added method
as parameters for my uploadSNPsToSeq
function and in the urls.py changed the url pattern for this view. 因此,在我的views.py中,我用
dataType
替换了idSequence
,添加了method
作为我的uploadSNPsToSeq
函数的参数,并在urls.py中更改了该视图的url模式。
views.py: 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():
dataType = form.cleaned_data['seq_linked']
return redirect('addSNPsSeq', dataType, method)
else:
form = SeqHasSnpForm()
return render(request, 'myapp/upload_sequence-has-snps.html', locals())
else:
...
else:
...
def uploadSNPsToSeq(request, dataType, method):
seq = Sequence.objects.get(PK_idSequence = dataType)
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)
return render(request, 'myapp/upload_snps-for-sequence.html', locals())
urls.py: urls.py:
urlpatterns = [
url(r'^upload_snps-for-sequence_(?P<dataType>[A-Za-z-]+)_(?P<method>(single|batch))$', 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')
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.