【问题标题】:url redirect with kwargs no NoReverseMatch使用 kwargs 的 url 重定向没有 NoReverseMatch
【发布时间】:2016-07-24 12:49:38
【问题描述】:

主项目 urls.py :

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('data.urls')),
]

urls.py:

urlpatterns = [
    url(r'^doll/$', views.doll_describer),
    url(r'^yourdolldata/(?P<id>\d+)/$', views.yourDollData),
    url(r'^connexion/$', views.connexion),
    url(r'^logout/$', views.deconnexion),
]

views.py

def doll_describer(request):
        # if this is a POST request we need to process the form data
    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = DollForm(request.POST)
        print(form)
        # check whether it's valid:
        if form.is_valid():
            print("was valid")
            doll = form.save(commit=False)
            doll.save()
            print("DOG.ID=",doll.id)
            return HttpResponseRedirect(reverse('yourDollData', kwargs={'id': doll.id}))

        else : 
            print("form is not valid")

    # if a GET (or any other method) we'll create a blank form
    else:
        form = DollForm()
        print("wasn't valid")

    return render(request, 'data/doll.html', {'form':DollForm})

def yourDollData(request,id):
    doll = DollData.objects.get(id=id)
    print("Doll=",doll)
    print("DOG_TYPE=",type(doll))
    return render(request, 'data/save.html', {'doll': doll})

我不明白为什么会出现以下错误:

/doll/ 处的 NoReverseMatch

它涉及HttpResponseRedirect(reverse('yourDollData', kwargs={'id': doll.id})) 艰难,doll.id 一切都很好,它在前一行正确打印出来。

当然,当我在浏览器中硬访问 127.0.0.1:8000/yourdolldata/15/ 时,它可以完美运行。所以这都是关于这个逆转过程的。我想这与我的 url 正则表达式不匹配我认为我正在反转的内容有关......

我怎样才能解决这个问题?我知道这是一个常见的错误,但在我完成互联网研究后,我看不到任何事情做错了。

【问题讨论】:

  • 您是否使用命名空间将应用 url 包含到主 url 中?
  • 我不明白你在这里的建议是什么......你能解释一下吗?
  • 好的,请发布您的项目级 urls.py 内容。谢谢。
  • 完成!我没有看到任何namespace。而且我不太明白为什么应该有一个。

标签: python-3.x url django-1.9


【解决方案1】:

为附加到您尝试反转的视图的 url 添加一个名称:

url(r'^yourdolldata/(?P<id>\d+)/$', views.yourDollData, name='check_doll_data')

将之前的名字作为reversefunction的参数。

        return HttpResponseRedirect(reverse('check_doll_data',kwargs={'id': dog.id}))

Reverse 可以将 url、视图名称或附加到 url 的视图名称作为第一个参数。

【讨论】:

    猜你喜欢
    • 2013-07-18
    • 2018-03-09
    • 2013-04-30
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2020-06-29
    • 2016-11-26
    相关资源
    最近更新 更多