NoReverseMatch 在 /

Posted

技术标签:

【中文标题】NoReverseMatch 在 /【英文标题】:NoReverseMatch at / 【发布时间】:2017-03-26 00:57:24 【问题描述】:

所以我试图制作一个简单的更新配置文件应用程序但是当我尝试访问更新页面时,我必须手动编写链接 + 在这种情况下,id 是 2,例如“accounts/update/2”,否则它不会当我尝试使用“% url 'edit_user' %”时不起作用,我明白了

`NoReverseMatch at /

Reverse for 'edit_user' with arguments '()' and keyword arguments '' not found. 1 pattern(s) tried: ['accounts/update/(?P<pk>\\d+)/']`

url.py

url(r'^admin/', admin.site.urls),
url(r'^$', main_views.home, name='home'),
url(r'^uprofile$', main_views.uprofile, name='uprofile'),
url(r'^accounts/update/(?P<pk>\d+)/', User_Profile_views.edit_user, name='edit_user'),
url(r'^accounts/', include('allauth.urls')),

views.py

@login_required() # only logged in users should access this
def edit_user(request, pk):
    # querying the User object with pk from url
    user = User.objects.get(pk=pk)

    # prepopulate UserProfileForm with retrieved user values from above.
    user_form = UserForm(instance=user)

    # The sorcery begins from here, see explanation below
    ProfileInlineFormset = inlineformset_factory(User, UserProfile, fields=('website', 'bio', 'phone', 'city', 'country', 'organization'))
    formset = ProfileInlineFormset(instance=user)

    if request.user.is_authenticated() and request.user.id == user.id:
        if request.method == "POST":
            user_form = UserForm(request.POST, request.FILES, instance=user)
            formset = ProfileInlineFormset(request.POST, request.FILES, instance=user)

            if user_form.is_valid():
                created_user = user_form.save(commit=False)
                formset = ProfileInlineFormset(request.POST, request.FILES, instance=created_user)

                if formset.is_valid():
                    created_user.save()
                    formset.save()
                    return HttpResponseRedirect('/accounts/profile/')

        return render(request, "account/account_update.html", 
            "noodle": pk,
            "noodle_form": user_form,
            "formset": formset,
        )
    else:
        raise PermissionDenied

html表单

<div class="col s12 m8 offset-m2">
      <div class="card">
        <div class="card-content">
        <h2 class="flow-text">Update your information</h2>
          <form action="." method="POST" class="padding">
            % csrf_token %  noodle_form.as_p 
            <div class="divider"></div>
             formset.management_form 
                 formset.as_p 
            <button type="submit" class="btn-floating btn-large waves-light waves-effect"><i class="large material-icons">done</i></button>
            <a href="#" onclick="window.history.back(); return false;" title="Cancel" class="btn-floating waves-effect waves-light red"><i class="material-icons">history</i></a>

        </form>
        </div>
    </div>
</div>

【问题讨论】:

我没有看到你在你发布的代码中的任何地方调用% url 'edit_user' % 这是真的,因为我在导航栏中使用它位于base.html中 【参考方案1】:

正如错误所说,edit_user 需要一个参数:要编辑的用户的 id。您需要在 url 标签中传递它。

% url 'edit_user' pk=my_user.pk %

或者你的用户对象的名字是什么。

【讨论】:

感谢 mate % url 'edit_user' pk=user.pk % 解决了它

以上是关于NoReverseMatch 在 /的主要内容,如果未能解决你的问题,请参考以下文章

NoReverseMatch at / Reverse for 'post_detail' 未找到

NoReverseMatch at / Reverse for 'singlepropa' 与参数 '('mens-shirt-1',)' 未找到。已尝试 1 种模式

NoReverseMatch at / Reverse for 'password_change_done' 与参数 '()' 和关键字参数 '' 未找到。尝试了 0 种模式:[]

我不知道我的错误是啥意思: NoReverseMatch at /sssss/ Reverse for '' with arguments '(9, 19)' and keyword argument

Django NoReverseMatch 新手

正则表达式匹配 2 个路由的 Django NoReverseMatch 异常