Skip to main content
 首页 » 编程设计

python之在 Django 中获取 NoReverseMatch 错误

2024年11月01日32lidabo

最奇怪的是,我只是从程序的工作部分复制了以下代码,只是换了个名字,所有的基础都是一样的。

错误:

NoReverseMatch at /profile/1/ 
Reverse for 'follow_user_add' with arguments '(1,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['profile/follow/'] 

ulrs.py:

url(r'^profile/', include('basics.urls')), 

基础/urls.py:

url(r'^follow/', 'basics.views.add_user_follower', name='follow_user_add'), 
url(r'^(?P<pk>\d+)/', UserDetailView.as_view(), name='users_detail'), 
 
url(r'^', UserListView.as_view(), name='users_list'), 

views.py:

class UserDetailView(DetailView): 
    model = User 
    template_name = 'basics/profile_detail.html' 
    context_object_name = 'user_object' 
 
    def get_context_data(self, **kwargs): 
        context = super(UserDetailView, self).get_context_data(**kwargs) 
        context["member_list"] = Member.objects.filter(user=self.object) 
        return context 
 
def add_user_follower(request, pk ): 
    if request.method == 'POST':  
        form = TempForm(request.POST or None)  
        if form.is_valid(): 
                ... 
                return HttpResponseRedirect(followed_user.get_url())  
 
    else: 
        form = TempForm() # An unbound form 
 
    return render(request, 'basics/profile_detail.html', { 
        'form': form, 
    }) 

和模板:

<form action="{% url 'follow_user_add' user_object.id %}"  method="post">{% csrf_token %} 
            <input type="submit" value="follow" /> 
            </form> 

请您参考如下方法:

我刚刚弄清楚你的错误,你给的 url 是这样的,

url(r'^follow/', 'basics.views.add_user_follower', name='follow_user_add'), 

但是在这样的模板中,

action="{% url 'follow_user_add' user_object.id %}" 

所以上面的url是这样匹配的/profile/follow/1/ .但是你的网址/profile/follow/ .

在这样的 View 中,

def add_user_follower(request, pk ): 

你得到了这个错误,

Reverse for 'follow_user_add' with arguments '(1,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['profile/follow/'] 

我的解决方案是将 url 与 pk 进行匹配,但是您没有那个模式。所以你需要这样说,

url(r'^follow/(?P<pk>\d+)/$', 'basics.views.add_user_follower', name='follow_user_add'), 

注意:您基本上错过了 (?P<pk>\d+)模式。希望对您有所帮助。

更新:以这种方式更改 url,

url(r'^follow/(?P<pk>\d+)/$', 'basics.views.add_user_follower', name='follow_user_add'), 
url(r'^(?P<pk>\d+)/$', UserDetailView.as_view(), name='users_detail'), 
 
url(r'^$', UserListView.as_view(), name='users_list'),