如何在 url django 中添加用户名
Posted
技术标签:
【中文标题】如何在 url django 中添加用户名【英文标题】:How to add username in url django 【发布时间】:2020-12-24 15:19:04 【问题描述】:Django 新手,这是一个简单的博客文章应用程序。如何在网址中包含帖子作者的姓名?
urlpatterns = [
path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
]
发布模型
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100, blank="true")
content = models.CharField(max_length=400)
views.py
class PostDetailView(DetailView):
model = Post
【问题讨论】:
这对您有帮助吗? ***.com/questions/18232851/… 【参考方案1】:您可以添加一个额外的参数:
urlpatterns = [
path('post/<str:author>/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
]
在视图中,可以对作者进行过滤,如果作者的用户名不正确,则不会显示任何内容:
class PostDetailView(DetailView):
model = Post
def get_queryset(self, *args, **kwargs):
return super().get_queryset(*args, **kwargs).filter(
author__username=self.kwargs['author']
)
我们可以使用包含作者用户名的.get_absolute_url()
method [Django-doc] 为Post
对象生成一个URL:
from django.urls import reverse
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100, blank="true")
content = models.CharField(max_length=400)
def get_absolute_url(self):
return reverse('post-detail', kwargs='id': self.pk, 'author': self.author.username)
注意:通常使用
settings.AUTH_USER_MODEL
[Django-doc] 引用用户模型比直接使用User
model [Django-doc] 更好。更多信息可以查看referencing theUser
model section of the documentation。
【讨论】:
您好,感谢您的回复。我收到此错误“未找到带有参数 '(1,)' 的 'post-detail' 的反向。尝试了 1 个模式:['post\\/(?P[^/]+) \\/(?P% url 'post-detail' post.id %
,但它需要作者的用户名,所以:% url 'post-detail' author=post.author.username pk=post.id %
。以上是关于如何在 url django 中添加用户名的主要内容,如果未能解决你的问题,请参考以下文章
如何将媒体文件的 URL 限制为 Django 中未经身份验证的用户?
如何在 django 中制作一个类似于谷歌表单的表单?用户可以在哪里根据需要添加或删除字段?用户最多可以添加10-20个字段?