python - NoReverseMatch at / Reverse for
问题描述
这个错误正在杀死我,请帮助我坐了 3 个小时,我什至不知道为什么会发生错误我会提供所有需要的信息,顺便说一句,我是 Django 新手,所以请解释一下,如果你能谢谢你,错误:
NoReverseMatch at / Reverse for 'change_friends' 关键字参数 '{'operation': 'add', 'pk': 2}' 未找到。尝试了 1 种模式:['connect/(P.+)/(P\d+)/']
这是我的意见.py
from django.views.generic import TemplateView
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from home.forms import HomeForm
from home.models import Post, Friend
class HomeView(TemplateView):
template_name = 'home/home.html'
def get(self, request):
form = HomeForm()
posts = Post.objects.all().order_by('-created')
users = User.objects.exclude(id=request.user.id)
try:
friend = Friend.objects.get(current_user=request.user)
friends = Friend.users.all()
except Friend.DoesNotExist:
friends = None
args = {
'form': form, 'posts': posts, 'users': users, 'friends': friends
}
return render(request, self.template_name, args)
def post(self, request):
form = HomeForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.user = request.user
post.save()
text = form.cleaned_data['post']
form = HomeForm()
return redirect('home:home')
args = {'form': form, 'text': text}
return render(request, self.template_name, args)
def change_friends(request, operation, pk):
friend = User.objects.get(pk=pk)
if operation == 'add':
Friend.make_friend(request.user, friend)
elif operation == 'remove':
Friend.lose_friend(request.user, friend)
return redirect('home:home')
模型.py
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
post = models.CharField(max_length=500)
user = models.ForeignKey(User, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Friend(models.Model):
users = models.ManyToManyField(User)
current_user = models.ForeignKey(User, related_name='owner', null=True, on_delete=models.CASCADE)
@classmethod
def make_friend(cls, current_user, new_friend):
friend, created = cls.objects.get_or_create(
current_user=current_user
)
friend.users.add(new_friend)
@classmethod
def lose_friend(cls, current_user, new_friend):
friend, created = cls.objects.get_or_create(
current_user=current_user
)
friend.users.remove(new_friend)
网址.py:
from django.conf.urls import url
from home.views import HomeView
from . import views
app_name= 'home'
urlpatterns = [
url('', views.HomeView.as_view(), name='home'),
url('connect/(P<operation>.+)/(P<pk>\d+)/', views.change_friends, name='change_friends')
]
html:
{% extends 'base.html' %}
{% block content %}
<div class="container">
<div class="col-md-8">
<h2>Home</h2>
<form method="post">
{% csrf_token %}
{{ form.post }}
<br>
<button type="submit">Submit</button>
</form>
<h2>{{ text }}</h2>
{% for post in posts %}
<h1>{{ post.post }}</h1>
<p>Posted by {{ post.user.get_full_name }} on {{ post.created }}</p>
{% endfor %}
</div>
<div class="col-md-4">
<h2>Other People</h2>
{% for user in users %}
<a href="{% url 'accounts:view_profile_with_pk' pk=user.pk %}">
<h3>{{ user.username }}</h3>
</a>
{% if not user in friends %}
<a href="{% url 'home:change_friends' operation='add' pk=user.pk %}">
<button type="button" class="btn btn-success">Add Friend</button>
</a>
{% endif %}
{% endfor %}
<h2>Friends</h2>
{% for friend in friends %}
<a href="{% url 'accounts:view_profile_with_pk' pk=friend.pk %}">
<h3>{{ friend.username }}</h3>
</a>
<a href="{% url 'home:change_friends' operation='remove' pk=friend.pk %}">
<button type="button" class="btn btn-default">Remove Friend</button>
</a>
{% endfor %}
</div>
</div>
{% endblock %}
追溯:
Traceback (most recent call last):
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\views\generic\base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\views\generic\base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\daghe\Desktop\Alone-Osama\home\views.py", line 25, in get
return render(request, self.template_name, args)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\loader.py", line 62, in render_to_string
return template.render(context, request)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\base.py", line 170, in render
return self._render(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\defaulttags.py", line 211, in render
nodelist.append(node.render_annotated(context))
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\defaulttags.py", line 312, in render
return nodelist.render(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\template\defaulttags.py", line 446, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\urls\base.py", line 87, in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "C:\Users\daghe\anaconda3\envs\env\lib\site-packages\django\urls\resolvers.py", line 685, in _reverse_with_prefix
raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /
Exception Value: Reverse for 'change_friends' with keyword arguments '{'operation': 'add', 'pk': 2}' not found. 1 pattern(s) tried: ['connect/(P<operation>.+)/(P<pk>\\d+)/']
解决方案
我已尝试使用此 url 路径并且正在工作
path('connect/<str:operation>/<int:pk>/',
views.change_friends, name='change_friends'),
推荐阅读
- python - 用一行中的项目数转换新列
- sql - 使用左连接和不同的总和不正确的值
- hazelcast - hazelcast 主题作为 hazelcast-jet 源
- mysql - 页面重定向问题 Node-js
- python - 在 Python 中将输入格式化为十进制价格
- c++ - 为什么阻止将反向迭代器 .rbegin() 用作要擦除的元素的位置?
- java - Spring 引导数据休息 - @RestResource(exported = false) 不适用于继承的方法。(保存,删除)
- python - 使用 BeautifulSoup 检查动态生成的页面上是否存在字符串
- angular - 我如何知道数据何时加载到 p-tree 上并选择第一个节点?
- javascript - vue js中的状态管理具有多个if条件以使用ID获取数据