找到NoReverseMatch

时间:2015-03-13 11:21:59

标签: python django django-urls

我正在使用django 1.7& python 3.4 我正在尝试实施跟随并取消关注用户进入我的网站但我被卡住了。 urls.py

url(r'^user/', include('myuserprofile.urls'),),

myuserprofile.urls.py

urlpatterns = patterns('',
                       url(r'^(?P<slug>[^/]+)/$', 'myuserprofile.views.profile', name='profile'),
                       url(r'^(?P<slug>[^/]+)/follow/$', 'myuserprofile.views.follow', name='follow'),
                       url(r'^(?P<slug>[^/]+)/unfollow/$', 'myuserprofile.views.unfollow', name='unfollow'),

views.py

@login_required
def follow(request):
    myuser = request.user.id
    if request.method == 'POST':
        to_user = MyUser.objects.get(id=request.POST['to_user'])
        rel, created = Relationship.objects.get_or_create(
            from_user=myuser.myuserprofile,
            to_user=to_user,
            defaults={'status': 'following'}
        )
else:
        return HttpResponseRedirect(reverse('/'))

            if not created:
                rel.status = 'following'
                rel.save()

,模板部分是这样的:

<form action="{% if relationship.status == 'F' %}{% url 'unfollow' %}{% else %}{% url 'follow' %}{% endif %}" method="POST">

使用参数'()'和找不到关键字参数'{}来反转'follow'。尝试了1种模式:['user /(?P [^ /] +)/ follow / $']

4 个答案:

答案 0 :(得分:1)

您应该添加要关注/取消关注的用户的用户名:

{% url 'follow' user_to_follow.username %}

urls.py更改为:

urlpatterns = patterns('myuserprofile.views',
         url(r'^(?P<username>[^/]+)/$', 'profile', name='profile'),
         url(r'^(?P<username>[^/]+)/follow/$', 'follow', name='follow'),
         url(r'^(?P<username>[^/]+)/unfollow/$', 'unfollow', name='unfollow'),
)

视图的签名应该接受username参数:

@login_required
def follow(request, username):
    myuser = request.user.id
    if request.method == 'POST':
        to_user = MyUser.objects.get(username=username)
        ...

答案 1 :(得分:0)

您需要使用namespaced URL。 在您的情况下,网址unfollow应引用为<app_name>:unfollow

答案 2 :(得分:0)

  

URL命名空间允许您甚至唯一地反转命名的URL模式   如果不同的应用程序使用相同的URL名称。这是一个很好的做法   使第三方应用程序始终使用命名空间的URL(正如我们在   教程)。同样,它还允许您反转URL(如果是多个)   部署了应用程序的实例。换句话说,因为   单个应用程序的多个实例将共享命名的URL,   命名空间提供了一种区分这些命名URL的方法

查看此Here

你必须使用URL namespaces

这是我的

轮询/ urls.py

from django.conf.urls import patterns, url

from . import views

urlpatterns = patterns('',
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
    ...
)

所以我们使用

{% url 'polls:index' %}

答案 3 :(得分:0)

你错过了模板中的slu ..

xlsx

应该是

<form action="{% if relationship.status == 'F' %}{% url 'unfollow' %}{% else %}{% url 'follow' %}{% endif %}" method="POST">