Django:NoReverseMatch 在
Posted
技术标签:
【中文标题】Django:NoReverseMatch 在【英文标题】:Django: NoReverseMatch at 【发布时间】:2022-01-04 23:54:24 【问题描述】:所以当我访问网址时:http://127.0.0.1:8000/post/2/。它没有向我显示帖子详细信息视图,而是给了我一个错误。我对此很困惑。但是我可以在列表视图和个人资料页面中看到它。 编辑:添加错误图片和detail.html
postsviews.py
class PostDetailView(LoginRequiredMixin, DetailView):
model = Posts
template_name = 'posts/detail.html'
models.py
class Posts(models.Model):
caption = models.CharField(max_length=2200)
date_posted = models.DateTimeField(default=timezone.now())
image = models.ImageField( upload_to='PostsImages')
user = ForeignKey(User, on_delete=models.CASCADE ,related_name='userposts')
def __str__(self):
return f"Post self.id (self.user.username)'s"
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
img = Image.open(self.image.path)
img.save(self.image.path)
主要的 urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('posts.urls')),
path('user/', include('users.urls')),
path('comments/', include('comments.urls'))
]
帖子 urls.py
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
from .views import PostsListView, PostCreatView, PostDeleteView, PostDetailView
urlpatterns = [
path('', PostsListView.as_view(), name='homepage'),
path('delete/<int:pk>/', PostDeleteView.as_view(), name='delete-post'),
path('creat-post', PostCreatView.as_view(), name='create-post'),
path('post/<int:pk>/', PostDetailView.as_view(), name='detail-post')
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
用户 urls.py
from django.urls import path
from django.contrib.auth import views as auth_views
from .views import ProfileDetailView
from .views import SignUp, LogOut
urlpatterns = [
path('signup/', SignUp, name='signup'),
path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'), #template_name'xx' tells it where to find the log in url
path('logout/', LogOut, name='logout'),
path('<int:pk>/profile', ProfileDetailView.as_view(), name='profile')
]
detail.html
% extends "posts/base.html" %
% block content %
<a href="% url 'profile' object.user.profile %">object.user.username</a>
<div>
<img class="rounded-circle article-img" src=" objetc.user.profile.picture.url " />
</div>
% if user == object.user %
<div>
<a href="% url 'delete-post' object.pk %" class="btn btn-outline-danger">Delete Post</a>
</div>
% endif %
<img src=" object.image.url " />
<div>
<a href="% url 'profile' object.user.profile %">object.user.username</a>
</div>
<p>object.caption</p>
<h6>Comments</h6>
% for comment in object.comments.all %
<hr class="bg-danger border-2 border-top border-primary">
<a href="% url 'profile' comment.user.profile.pk %">comment.user.username</a>
<p>comment.text</p>
% if user == comment.user %
<a href="% url 'delete-comment' comment.pk %" class="btn btn-outline-primary btn-sm mb-2 mr-4">Delete</a>
<a href="% url 'update-comment' comment.pk %" class="btn btn-outline-primary btn-sm mb-2 mr-4">Edit</a>
% endif %
% endfor %
<div>
<a href="% url 'add-comment' object.pk %" class="btn btn-outline-primary mt-2">Add Comment</a>
</div>
% endblock %
【问题讨论】:
请分享您的错误回溯 @Amin 如果这意味着回溯,我已经添加了错误的屏幕截图。谢谢你:) 你能分享你的 detail.html 吗? @amadousow 已添加,谢谢 :) 你的 ProfileDetailView 是什么样的? 【参考方案1】:改变这个
<a href="% url 'profile' object.user.profile %">object.user.username</a>
到
<a href="% url 'profile' object.user.profile.pk %">object.user.username</a>
应该可以的。
【讨论】:
如果您仍然收到错误,请编辑您的帖子并添加您的用户和个人资料模型。 其实你应该问他他在pk中为profiledetailview传递了什么,可能有两种情况:the user pk
或the profile pk
。
是的,它正在工作。谢谢大佬
@Ahmed 很高兴知道它对您有用。以上是关于Django:NoReverseMatch 在的主要内容,如果未能解决你的问题,请参考以下文章
Django - NoReverseMatch:“bha”的反向没有找不到参数
在 Django 中使用 % url % 时的 NoReverseMatch
NoReverseMatch 在渲染 Django 管理屏幕时?