我正在使用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 / $']
答案 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">